Postgresql pg_如何还原始终作为标识列生成的句柄?
如果我Postgresql pg_如何还原始终作为标识列生成的句柄?,postgresql,Postgresql,如果我pg\u将--data only还原到如下表中: CREATE TABLE foo ( id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, bar varchar ); id列会发生什么变化?生成的总是被忽略,并且从pg_dump文件插入ID,还是生成了新ID 文档在--仅数据标志下显示: 表数据、大型对象和序列值(如果存在于存档中)将被还原 此处的“序列值”是否包括始终作为标识生成的 我使用的是Postgres 11,但我想知道
pg\u将--data only
还原到如下表中:
CREATE TABLE foo (
id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
bar varchar
);
id
列会发生什么变化?生成的总是被忽略,并且从pg_dump
文件插入ID,还是生成了新ID
文档在--仅数据
标志下显示:
表数据、大型对象和序列值(如果存在于存档中)将被还原
此处的“序列值”是否包括始终作为标识生成的
我使用的是Postgres 11,但我想知道,自从所有普遍支持的版本(>=9.5)以来,这种行为是否都是相同的。对于INSERT
,如果要从标识列中否决默认值,需要使用重写系统值,但是对于COPY
没有这样的限制
这使得pg_dump
变得简单。下面是具有标识列的表的转储的示例:
/* section = pre-data */
CREATE TABLE laurenz.identity (
id integer NOT NULL,
value text NOT NULL
);
ALTER TABLE laurenz.identity ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
SEQUENCE NAME laurenz.identity_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
/* section = data */
COPY laurenz.identity (id, value) FROM stdin;
1 one
2 two
3 three
-10 weird
-5 also weird
\.
/* section = post-data */
SELECT pg_catalog.setval('laurenz.identity_id_seq', 3, true);
“这里的“序列值”是否包括始终作为标识生成的?”由于IDENTITY
列在后台使用序列,我非常希望这样。