我使用如下命令进行数据库备份(-Fd
意思是“目录”格式):
pg_dump -U postgres -Fd -j 8 -f testdb.dir testdb
我的数据库包含许多带有个人数据的架构。有时我可能需要从备份中删除一个架构。恢复并重新转储不是一个可行的解决方案(备份太多)。
因此理想情况下我需要一个类似的命令command --remove-schema=user123 testdb.dir
。这只会删除适当的1234.dat.gz
文件并可能更新toc.dat
内部testdb.dir
。
附言:我知道我可以用列出内容pg_restore -l
,但还没有找到描述输出文件格式的文档。我不想猜测是什么,以免丢失数据。
答案1
如果您已经分离数据,以便所有 PII 都包含在一个模式中;那么您可以从转储中排除该模式。
来自的手册页pg_dump
:
-N schema
--exclude-schema=schema
Do not dump any schemas matching the schema pattern. The pattern is interpreted
according to the same rules as for -n. -N can be given more than once to exclude
schemas matching any of several patterns.
When both -n and -N are given, the behavior is to dump just the schemas that match at
least one -n switch but no -N switches. If -N appears without -n, then schemas matching
-N are excluded from what is otherwise a normal dump.
这将破坏已恢复数据库中其他架构中的表的外键引用。这只是一种方法;根据您的用例,还有很多其他方法。
如果您正在生产数据产品,您可能希望编写自定义导出脚本,以删除悬空 ID 并添加格式以及消费者想要的其他功能。备份工具主要用于保存所有数据,在过滤数据方面相当生硬。
答案2
没有办法。您可以尝试通过以下方式删除它,grep -p
但对我来说这非常复杂。恢复后删除架构可能更容易