在使用pg_dump
创建的数据库转储中,某些表在DEFAULT
语句中具有CREATE TABLE
s,即:
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
创建的,但在转储中它们看起来不同,我无法猜测任何规则。
区别在于,在第一种情况下,序列由表列“拥有”。
您可以在创建序列时使用OWNED BY
子句指定此依赖关系。当列为时,将自动删除列所拥有的序列。
如果使用serial
隐式创建序列,则它将归列所有。