使用Postgresql导出带有x个表的数据库 - 仅包含一个表的架构,但是数据也要导出。

8

我目前遇到一个小麻烦,想请教一下。

假设我有一个包含多个表的数据库,我只想导出其中一个特定表的结构和数据,但是命令行需要很长,并且我需要知道所有表的名称。

我想要一条命令,不需要知道其他表的名称或数量,只需要指定我想要的表的数据,其他表都不需要考虑,最终我希望将所有内容保存在一个文件中。

期待读到一些建议或解决问题的方法。真的很好奇 :)

1个回答

19
默认的pg_dump输出格式是psql脚本,因此您可以将它们串联起来:
pg_dump -d my_db --schema-only > dump.sql
pg_dump -d my_db -t my_table --data-only >> dump.sql

没错,那是相当明显的解决方案。无论如何,我主要是想通过更复杂的解决方案来获得一些postgresql的经验。当然,我也在寻找最好是简短而简单的解决方案来解决我的问题。连接是好的并且有效,但我更喜欢一行代码的解决方法 ;) - Samarek
1
@Doeyo:嗯,你可以使用{pg_dump...; pg_dump...} > dump.sql将其压缩到一行中... Postgres除了pg_dump之外没有提供任何导出数据库结构的方法,而--schema-only--data-only选项是互斥的,所以我认为这已经尽可能简单了。 - Nick Barnes
但是,如果您想要一些仅仅为了“复杂”而存在的东西,这里有一些可怕的丑陋代码... 您可以构建一个与所需输出相匹配的临时数据库,或者通过行安全策略抑制转储其他表。请不要在任何真正关心的系统上运行它们 :) - Nick Barnes
是的,我已经想到互斥性了,这实际上是我提出问题的原因。感谢提供链接,我不会运行它们,但它们看起来有点有趣,所以我会抽出一些时间去查看它们。我现在采用的解决方案是串联,因为它似乎是最合理的,并且只是一个临时解决方法,以获取一组测试数据。但这确实是一个有趣的学习经历,感谢您的帮助。 - Samarek
如果我使用压缩格式(使用-Fc)进行转储,我能做这种连接吗? - pab789
@prabhang:不,每个二进制转储文件都包含自己的“目录”,因此您不能直接连接这些文件。如果您真的需要一个单独的“-Fc”转储文件,我认为您需要将“--schema-only”和“--data-only” 转储到一个临时数据库中,并从那里进行完整的转储。 - Nick Barnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接