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

Rol*_*and 139 postgresql backup pg-dump

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

Fra*_*ens 184

使用--table告诉pg_dump它备份什么表:

pg_dump --host localhost --port 5432 --username postgres --format plain --ignore-version --verbose --file "<abstract_file_path>" --table public.tablename dbname
Run Code Online (Sandbox Code Playgroud)

  • `psql -U username -d database -1 -f your_dump.sql` (10认同)
  • 以及如何恢复该备份文件.(.backup),我使用`pg_restore --host localhost --port 5432 --username postgres --dbname"anydb"--table public.tablename -Ft --verbose"/path/filename.backup"`但它来了out:`pg_restore:[tar archiver]在-`中找到损坏的tar头 (8认同)
  • 你是什​​么意思:abstract_file_path? (4认同)
  • 我不知道为什么这个答案被投票,人们点击+1而没有自己检查或尝试。这个答案的问题在于,给出的解决方案/命令不会导出在表(主键)上创建的序列,因此导入失败。我不知道任何地方有哪个生产 PG 数据库不使用带有序列的主键。这是一个半答案,未能彻底回答问题,并且需要额外的工作来导出/导入单个表。 (4认同)
  • @user10664542 当然,一定有一些生产 PG 数据库使用 uuid 而不是主键序列。 (4认同)

Sri*_*ala 72

如果你在Ubuntu,

  1. 登录您的postgres用户 sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

请确保您正在执行其中的命令postgres的用户具有写权限(例如:/tmp)

编辑

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

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

  • 我不知道为什么但-d选项对psql9.3无效,并且给定命令对我不起作用.工作一个是**pg_dump -U username db_name -t table_name> fileName**. (4认同)
  • 只需删除-t选项!`pg_dump -d <database_name >> file.sql` (3认同)
  • 如果您想要所有表,而无需指定每个表的名称,该怎么办? (2认同)

小智 36

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

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

9种方法使用pg_dump

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

Fra*_*urt 10

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

在此输入图像描述

在此输入图像描述

在此输入图像描述


小智 9

你可以使用这个命令

pg_dump --table=yourTable --data-only --column-inserts yourDataBase > file.sql
Run Code Online (Sandbox Code Playgroud)

你应该将 yourTable、yourDataBase 更改为你的情况

  • --data-only 标志是我所缺少的 (2认同)