ChatGPT解决这个技术问题 Extra ChatGPT

如何在 postgres 数据库中创建单个表的备份?

有没有办法使用 postgres 在数据库中创建单个表的备份?如何?这是否也适用于 pg_dump 命令?


J
James

使用 --table 告诉 pg_dump 它必须备份哪个表:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

以及如何恢复该备份文件。 (.backup),我使用了 pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup" 但它出来了:pg_restore: [tar archiver] corrupt tar header found in --
psql -U username -d database -1 -f your_dump.sql
你是什么意思:abstract_file_path?
我不确定为什么这个答案被投票赞成,人们点击 +1 而不自己检查或尝试。这个答案的问题是它完全没用,给出的解决方案/命令不会导出在表上创建的序列(主键),因此导入失败。我不知道任何地方都有一个生产 PG 数据库不使用带序列的主键。这是一半的答案,无法彻底回答问题,需要额外的工作来导出/导入单个表。
与此稍有不同的 sudo 扭曲我最终在文件转储上出现权限错误(足够合乎逻辑,因为用户 postgres 对我的目录没有写访问权限),并且我对 --ignore-version 有一个未知标志错误。 Prashant Kumar 的回答更简单,对我有用。
S
Sri Harsha Kappala

如果你在 Ubuntu 上,

登录到您的 postgres 用户 sudo su postgres pg_dump -d -t > file.sql

确保您正在执行 postgres 用户具有写入权限的命令(示例:/tmp

编辑

如果您想将 .sql 转储到另一台计算机中,您可能需要考虑跳过保存到 .sql 文件中的所有者信息。

您可以使用 pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


如果您想要所有表,而不必指定每个表的名称怎么办?
只需删除 -t 选项! pg_dump -d <database_name> > file.sql
我不知道为什么,但是 -d 选项对 psql9.3 无效,并且给定的命令对我不起作用。工作之一是 pg_dump -U username db_name -t table_name > fileName。
pg_dump -t <table_name> <database_name> > file.sql
@user10664542:请阅读手册,尤其是本节:“为此,“表”包括视图、物化视图、序列和外部表”。
V
Vedran Šego

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table > backup.sql

您可以备份单个表,但我建议备份整个数据库,然后恢复您需要的任何表。备份整个数据库总是好的。

9 ways to use pg_dump


我不确定为什么这个答案被投票赞成,人们点击 +1 而不自己检查或尝试。这个答案的问题是它完全没用,给出的解决方案/命令不会导出在表上创建的序列(主键),因此导入失败。我不知道任何地方都有一个生产 PG 数据库不使用带序列的主键。这是一半的答案,无法彻底回答问题,需要额外的工作来导出/导入单个表。
如上所述,我强烈怀疑 user10664542,没有任何 SO postgres 对他的名字的回答,在这里超出了他的深度。虽然序列确实带来了额外的复杂性,但人们可能让他们工作的相似答案获得了足够多的支持,即使他们不得不在事后调整序列。如果我必须恢复我的转储,我会寻找方法从我表上的 max(id) 更新序列的最后一个 id。这是有效的答案,我相信,看着生成的 sql,我可以恢复它。
F
Franck Dernoncourt

如果您更喜欢图形用户界面,您可以使用 pgAdmin III (Linux/Windows/OS X)。只需右键单击您选择的表,然后“备份”。它将为您创建一个 pg_dump 命令。

https://i.stack.imgur.com/lu5jH.png

https://i.stack.imgur.com/FjVUk.png

https://i.stack.imgur.com/W21oi.png


佚名

你可以使用这个命令

pg_dump --table=yourTable --data-only --column-inserts yourDataBase > file.sql

你应该改变你的表,你的数据库为你的情况


u
user3207874

作为对 Frank Heiken 回答的补充,如果您希望使用 INSERT 语句而不是 copy from stdin,那么您应该指定 --inserts 标志

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

请注意,我省略了 --ignore-version 标志,因为它已被弃用。


我不确定为什么这个答案被投票赞成,人们点击 +1 而不自己检查或尝试。这个答案的问题是它完全没用,给出的解决方案/命令不会导出在表上创建的序列(主键),因此导入失败。我不知道任何地方都有一个生产 PG 数据库不使用带序列的主键。这是一半的答案,无法彻底回答问题,需要额外的工作来导出/导入单个表。
u
user1188867

使用以下命令获取表转储的压缩版本:

pg_dump -h localhost -p 5432 -U <username> -d <dbname> -t <tablename> -Fc -f backup.out