我使用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的另一个更改集,用于创建表和关联序列。
我很想知道这是否是实现这一目标的正确方法。
答案 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;
因此,为序列使用较短的名称。或者使用较短的表名并节省麻烦。