Database Liquibase:PostgreSQL序列类型与Oracle序列

Database Liquibase:PostgreSQL序列类型与Oracle序列,database,postgresql,oracle11g,liquibase,Database,Postgresql,Oracle11g,Liquibase,我有一个使用liquibase定义的PostgreSQL模式。我使用了“串行”数据类型。对于这些数据类型,数据库在其pg_目录表中创建一个具有特定名称的序列。现在我正在移植我的应用程序以支持Oracle。我为创建序列添加了一个单独的更改集。PostgreSQL创建的序列名非常大,Oracle不允许它。我需要修改模式定义,使两者具有相同的序列名。这是因为我正在使用hibernate,需要在相应的hbm文件中指定相同的内容 我能想到的另一种选择是为PostgreSQL和Oracle设置不同的更改集。

我有一个使用liquibase定义的PostgreSQL模式。我使用了“串行”数据类型。对于这些数据类型,数据库在其pg_目录表中创建一个具有特定名称的序列。现在我正在移植我的应用程序以支持Oracle。我为创建序列添加了一个单独的更改集。PostgreSQL创建的序列名非常大,Oracle不允许它。我需要修改模式定义,使两者具有相同的序列名。这是因为我正在使用hibernate,需要在相应的hbm文件中指定相同的内容

我能想到的另一种选择是为PostgreSQL和Oracle设置不同的更改集。对于PostgreSQL,它将具有CREATETABLE标记,该标记将生成如下所述的查询[http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-连载]。然后是Oracle的另一个更改集,用于创建表和关联序列


我很想知道这是否是实现这一目标的正确且唯一的方法。

在PostgreSQL中,您可以使用任何名称创建序列。数据类型
serial
只是对以下内容的简写-我引用手册:

因此,对序列使用较短的名称。或者使用更短的表名,省去麻烦

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;