Liquibase:PostgreSQL序列类型与Oracle序列



我有一个使用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设置另一个更改集,只创建表和关联的序列。

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

在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;

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

最新更新