给定一个具有某些表继承的 postgresql 12 数据库,并且子表不添加其他列:
CREATE TABLE parent (
id integer NOT NULL PRIMARY KEY,
name text NOT NULL
);
CREATE TABLE child () INHERITS (parent);
如果我运行 pg_dump(带pg_dump foo
),导出中的表如下所示:
CREATE TABLE public.parent (
id integer NOT NULL,
name text NOT NULL
);
CREATE TABLE public.child (
)
INHERITS (public.parent);
如果我然后分离并重新连接孩子:
$ psql foo
psql (12.1 (Debian 12.1-2))
Type "help" for help.
foo=# ALTER TABLE child NO INHERIT parent;
ALTER TABLE
foo=# ALTER TABLE child INHERIT parent;
ALTER TABLE
...并尝试另一个 pg_dump,导出已更改。子表现在显式列出了从父表继承的列:
CREATE TABLE public.parent (
id integer NOT NULL,
name text NOT NULL
);
CREATE TABLE public.child (
id integer,
name text
)
INHERITS (public.parent);
我能做些什么来让 pg_dump 输出没有显式列的子表吗?
这听起来像是一个人为的例子,但我有一个多 Tb 数据库,它的子表在时间的迷雾中被分离和重新连接,我希望模式导出恢复到简单(并且可读) 尽可能。
特别是,如果每个人一眼就能看到子表没有添加额外的列,那就太好了。
您可能会弄乱
pg_attribute
目录表并将其设置attislocal
为FALSE
,但不支持修改系统目录并且很危险。在我看来,这并不能仅仅作为审美改善的保证。转储工作和它一样好。