postgresql 如何只对表而不对触发器和函数进行pg_dump?

wi3ka0sx  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(191)

我想要的:

我想要一个数据库的pg_dump(让我们把数据库称为'test')。在这个pg_dump中我只想要表而不以下内容:数据、触发器、函数、序列等。

我正在做什么来得到我想要的:

我运行的命令如下:

pg_dump -U postgres -s test > dump_test.sql

我所观察到的:

然后,当我尝试在另一台服务器上恢复此转储时,如下所示:

pg_dump -U postgres new_amazing_test < dump_test.sql

我注意到运行上述命令的部分输出如下:

CREATE TRIGGER
CREATE FUNCTION
CREATE SEQUENCE
CREATE INDEX

"我真正想要的是“
我想要的只是表本身,而不是这些触发器、函数、序列和索引。如何只获取表?

我尝试过/考虑过的其他事情:

1.我试过这样做:

pg_dump -U postgres -s -schema=\dtmvE test > dump_test.sql

但它不起作用,因为模式需要是名称而不是\d模式。
有关-n pattern选项得信息,请参见此处:https://www.postgresql.org/docs/13/app-pgdump.html.
1.有一种方法可以解决这个问题,就是使用多个开关,如下所示:

pgdump -t mytable1 -t mytable2 -t mytable3 ... -t mytableN > dump_test.sql

但是,上面的解决方案是不切实际的,因为我的数据库中有大约70多个表。

其他相关信息:

PostgreSQL版本为13.1
Ubuntu v16.04版(我也在Ubuntu v18.04上试过这个)

w9apscun

w9apscun1#

我会使用自定义格式的schema-only dump(-F c -s)转储所有内容,并在得到的转储文件上运行pg_restore -l。这会为您提供一个目录。从该文件中删除除表以外的所有内容,并将其作为pg_restore -L的输入,以便从归档文件中准确恢复您需要的那些项目。
这可能不像您希望的那样简单,但肯定比编写大量的-t选项要简单,而且您可以将其自动化。

oug3syen

oug3syen2#

您可以使用--section标志,如postgres documentation

--section=sectionname
Only dump the named section. The section name can be pre-data, data, or post-data. This option can be specified more than once to select multiple sections. The default is to dump all sections.

The data section contains actual table data, large-object contents, and sequence values. Post-data items include definitions of indexes, triggers, rules, and constraints other than validated check constraints. Pre-data items include all other data definition items.

例如:

pg_dump --schema-only --section=pre-data

相关问题