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 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
...
复制的实际数字
将一些 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 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
...