1

我想要什么:
我想要一个数据库的 pg_dump(我们称数据库为“测试”)。在这个 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 模式。有关选项的信息,
    请参见此处:https ://www.postgresql.org/docs/13/app-pgdump.html。-n pattern

  2. 可以解决它的一件事是使用多个开关,如下所示:

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

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

其他相关信息:
PostgreSQL 版本是 13.1
Ubuntu 版本 v16.04(我也在 Ubuntu v18.04 上试过这个)

4

1 回答 1

2

我将使用自定义格式仅模式转储 ( -F c -s) 转储所有内容并pg_restore -l在生成的转储上运行。这给了你一个目录。从该文件中删除除表之外的所有内容,并将其用作输入以pg_restore -L从存档中准确恢复您需要的那些项目。

This may not be as simple as you have hoped for, but it is certainly simpler than writing tons of -t options, and you may be able to automatize it.

于 2020-11-25T07:24:35.747 回答