PostgreSQL 更改字段顺序

PostgreSQL change field sequence

将一些 table 从一个模式复制到另一个模式时出现问题,现在我有几个 table 的序列字段指向另一个模式的序列。我想改变这种依赖。

我需要将这些序列复制到 table 模式并更改字段以指向当前 table 模式中的副本。

Table 1个定义:

CREATE TABLE schema1.table1
(
    gid integer NOT NULL DEFAULT nextval('schema2.table1_seq'::regclass),
    ...
)

我希望它指向 schema1.table1_seq 。可能吗?

使用ALTER TABLE:

ALTER TABLE schema1.table1 ALTER gid SET DEFAULT nextval('schema1.table1_seq'::regclass);

搬家的时候自己做:

t=# create schema schema1;
CREATE SCHEMA
t=# create table schema1.a(i serial);
CREATE TABLE
t=# create schema schema2;
CREATE SCHEMA
t=# alter table schema1.a set schema schema2;
ALTER TABLE
t=# \d b.a
                               Table "schema2.a"
 Column |  Type   | Collation | Nullable |            Default
--------+---------+-----------+----------+--------------------------------
 i      | integer |           | not null | nextval('schema2.a_i_seq'::regclass)

但让我们模拟一下您的状态:

t=# create sequence schema1.s;
CREATE SEQUENCE
t=# create table schema2.a(i int default nextval('schema1.s'::regclass));
CREATE TABLE

现在你需要:

t=# create sequence schema2.s start with 99;
CREATE SEQUENCE
t=# alter table schema2.a alter column i set default nextval('schema2.s'::regclass);
ALTER TABLE

其中 99 是从 schema1.s...

复制的实际数字