PostgreSQL改变字段序列

时间:2018-01-15 11:29:44

标签: postgresql database-schema

将一些表从一个模式复制到另一个模式时出现问题,现在我有一些表,其中串行字段指向另一个模式的序列。我想改变那种依赖。

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

表1定义:

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

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

2 个答案:

答案 0 :(得分:1)

使用ALTER TABLE:

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

答案 1 :(得分:0)

它应该在移动时自行完成:

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

但是让我们模拟你的状态:

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

现在你需要:

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

将99作为从a.s ...

复制的实际数字