我想要的:
我想要一个数据库的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上试过这个)
2条答案
按热度按时间w9apscun1#
我会使用自定义格式的schema-only dump(
-F c -s
)转储所有内容,并在得到的转储文件上运行pg_restore -l
。这会为您提供一个目录。从该文件中删除除表以外的所有内容,并将其作为pg_restore -L
的输入,以便从归档文件中准确恢复您需要的那些项目。这可能不像您希望的那样简单,但肯定比编写大量的
-t
选项要简单,而且您可以将其自动化。oug3syen2#
您可以使用
--section
标志,如postgres documentation例如: