0

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

我有兴趣知道这是否是实现这一目标的正确且唯一的方法。

4

1 回答 1

1

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

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

于 2012-07-10T21:41:49.833 回答