Postgres pg_dump 使用压缩-仅保留某些表的架构

Postgres pg_dump 使用压缩-仅保留某些表的架构

我目前正在每晚导出 Postgres 10.5 数据库,但只提取 2 个非常大的表的架构,而我不需要这些表的数据。完成后我会压缩导出,并且非常希望继续使用 pg_dump 的内部压缩系统,因为在我的测试中它的速度要快得多。

这是我目前正在使用的工作流程:

pg_dump -U postgres -h example.com -T very_large_tbl -T large_tbl db > /tmp/mydbdump

pg_dump -U postgres -h example.com -s -t very_large_tbl -t large_tbl db >> /tmp/mydbdump

bzip2 -zc < /tmp/mydbdump > /tmp/compressed_dbdump.dat.bz2

工作流程需要遵循以下准则:

  1. 表格需要导出very_large_tbl,但large_tbl不含数据(仅有模式)。
  2. 所有其他表都需要导出模式 + 数据。
  3. 最终结果必须被压缩

我当前的工作流程遵循这些准则,没有任何问题。然而,在其他数据库上进行测试时,使用的pg_dump -F c整体处理时间比导出然后压缩要快得多。

据我所知,您不能使用-sinpg_dump来“挑选”哪些表只获得架构。要么全部,要么全部。我错了吗?

我的问题是:

使用 pg_dump 选项时,是否可以仅将“某些”表导出为模式-F c或者是否可以将其附加到已压缩的现有转储中-F c

即使这个过程必须分为两个部分进行,也没问题,我愿意接受“开箱即用”的解决方法。只是想知道这是否有可能。

答案1

好吧,就像往常一样,我只需要回到文档并仔细研究它。

pg_dump 有一个--exclude-table-data选项。

因此,要排除名为它的表的数据,my_table很简单--exclude-table-data=my_table

这将转储表的创建信息,但会排除其中的任何数据。

相关内容