Postgres:CREATE TABLE中的DEFAULT与数据库转储中的ALTER TABLE之间的区别

时间:2019-03-05 22:39:28

标签: postgresql default pg-dump database-sequence

在使用pg_dump创建的数据库转储中,某些表在DEFAULT语句中包含CREATE TABLE,即:

CREATE TABLE test (
  f1 integer DEFAULT nextval('test_f1_seq'::regclass) NOT NULL
);

但是其他人还有一条ALTER语句:

ALTER TABLE ONLY test2 ALTER COLUMN f1 SET DEFAULT nextval('test2_f1_seq'::regclass);

这是什么原因?所有顺序字段都是用类型SERIAL创建的,但是在转储中它们看起来不同,因此我猜不到任何规则。

1 个答案:

答案 0 :(得分:0)

区别必须是在第一种情况下,序列归表列“拥有”。

创建序列时,可以使用OWNED BY子句指定此依赖项。列所拥有的序列将在该列存在时自动删除。

如果使用serial隐式创建了一个序列,则该列将归该列所有。