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

问题描述 投票:0回答:1

在使用pg_dump创建的数据库转储中,某些表在DEFAULT语句中具有CREATE TABLEs,即:

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创建的,但在转储中它们看起来不同,我无法猜测任何规则。

postgresql default pg-dump database-sequence
1个回答
0
投票

区别在于,在第一种情况下,序列由表列“拥有”。

您可以在创建序列时使用OWNED BY子句指定此依赖关系。当列为时,将自动删除列所拥有的序列。

如果使用serial隐式创建序列,则它将归列所有。

© www.soinside.com 2019 - 2024. All rights reserved.