Liquibase:PostgreSQL串行类型与Oracle序列

时间:2012-07-10 20:51:24

标签: database postgresql oracle11g liquibase

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

我能想到的替代方案是为PostgreSQL和Oracle设置不同的更改集。对于PostgreSQL,它会创建表标记,生成类似于此处提到的查询[http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-SERIAL]。然后是Oracle的另一个更改集,用于创建表和关联序列。

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

1 个答案:

答案 0 :(得分:1)

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

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;

因此,为序列使用较短的名称。或者使用较短的表名并节省麻烦。