mysql - SQL: Application cross-db maintain only one generic schema -
i have application based on mysql schema based on innodb (with constraints...) co-workers need import schema, export schema in sql files.
for example:
drop table if exists `admins`; create table `admins` ( `id` smallint(5) unsigned not null auto_increment, `username` varchar(45) not null, `password` varchar(45) not null, `email` varchar(45) default null, `creation_date` datetime not null, `close_date` datetime default null, `close_reason` varchar(45) default null, primary key (`id`) ) engine=innodb default charset=utf8 auto_increment=4 ;
now, have cross-db application, so:
- i tried import previous sql files in postgresql, didn't work, sql files mysql-related (for example use of ` character...)
- i tried export schema mysqldump , compatibility mode "--compatible=ansi" goal: have generic sql file compatible major sgbd. didn't work: postgresql returns error synthax
compatible=ansi returns:
drop table if exists "admins"; /*!40101 set @saved_cs_client = @@character_set_client */; /*!40101 set character_set_client = utf8 */; create table "admins" ( "id" smallint(5) unsigned not null auto_increment, "username" varchar(45) not null, "password" varchar(45) not null, "email" varchar(45) default null, "creation_date" datetime not null, "close_date" datetime default null, "close_reason" varchar(45) default null, primary key ("id") ); /*!40101 set character_set_client = @saved_cs_client */;
i tried export compatibility=postgresql:
drop table if exists "admins"; /*!40101 set @saved_cs_client = @@character_set_client */; /*!40101 set character_set_client = utf8 */; create table "admins" ( "id" smallint(5) unsigned not null, "username" varchar(45) not null, "password" varchar(45) not null, "email" varchar(45) default null, "creation_date" datetime not null, "close_date" datetime default null, "close_reason" varchar(45) default null, primary key ("id") ); /*!40101 set character_set_client = @saved_cs_client */;
but didn't work...
i know there tools convert mysql schema postgresql schema isn't goal...
my question: possible have 1 sql file compatible mysql, postgresql, sqlite... , don't maintain sql file each sgbd ?
thank you
my question: possible have 1 sql file compatible mysql, postgresql, sqlite... , don't maintain sql file each sgbd ?
not raw sql, unless wish use pathetic subset of databases' supported features.
selects , dml in sql can moderately portable, ddl hopeless nightmare total basics. you'll want abstraction tool generates sql you, handling database specific differences in sequences/generated keys, type naming, constraints, index creation, etc.
as 1 example, lets @ auto-incrementing values / sequences, used synthetic keys:
- mysql:
integer auto_increment
- postgresql:
serial
(shorthand sequence) - ms-sql:
int identity(1,1)
- oracle (below 12c): no direct support, use sequence.
- oracle (12c , above):
number generated default on null identity
.. , that's common task of generated key. lots of other fun differences exist. example, mysql has tinyint
, unsigned int
. postgresql not. postgresql has bool
, has bit(n)
bitfields, range-types, postgis types, etc etc etc other dbs don't have. things that're shared, quirks abound - specifying "4 byte signed integer" across dbs isn't trivial.
one option liquibase i've heard things about. people instead use orm manage ddl generation instead - though tend use, again, primitive of database features.
Comments
Post a Comment