我目前正在每晚导出 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
工作流程需要遵循以下准则:
- 表格需要导出
very_large_tbl
,但large_tbl
不含数据(仅有模式)。 - 所有其他表都需要导出模式 + 数据。
- 最终结果必须被压缩
我当前的工作流程遵循这些准则,没有任何问题。然而,在其他数据库上进行测试时,使用的pg_dump -F c
整体处理时间比导出然后压缩要快得多。
据我所知,您不能使用-s
inpg_dump
来“挑选”哪些表只获得架构。要么全部,要么全部。我错了吗?
我的问题是:
使用 pg_dump 选项时,是否可以仅将“某些”表导出为模式-F c
?或者是否可以将其附加到已压缩的现有转储中-F c
?
即使这个过程必须分为两个部分进行,也没问题,我愿意接受“开箱即用”的解决方法。只是想知道这是否有可能。
答案1
好吧,就像往常一样,我只需要回到文档并仔细研究它。
pg_dump 有一个--exclude-table-data
选项。
因此,要排除名为它的表的数据,my_table
很简单--exclude-table-data=my_table
这将转储表的创建信息,但会排除其中的任何数据。