pg_restore从表转储中恢复失败。

3

我使用以下命令创建了一个Postres表的转储:

pg_dump -Fc -v --host=host_name --username=user_name --dbname=database_name --table table_name -f E:\file_name.dump

现在我正在尝试将其恢复到一个新表中,但是命令不起作用,也没有错误。我已经尝试了两种方式运行它:

  1. pg_restore -v -Fc -h host_name -U user_name -p 5432 -d database_name -t table_name E:\file_name.dump 返回“pg_restore:暗示数据恢复”
  2. pg_restore -v -U user_name --data-only -h host_name -d database_name -t table_name E:\filename.dump 只是返回而没有执行或返回错误

任何帮助都将不胜感激。谢谢。


#2 对我有效。A) 你是否会得到类似于 pg_restore: 连接恢复数据库 的信息?B) 表中的数据是否存在? - Adrian Klaver
@AdrianKlaver 感谢回复。A)是的 B)不 - ASing
  1. 你确定 pg_dump 没有使用 -a/--data-only 参数吗?
  2. 为什么在 pg_restore 命令中有不同的文件名?
  3. table_name 在你要恢复的数据库中存在吗?请检查大小写是否一致。
  4. 你确定正在恢复到正确的数据库吗?换句话说,你确认数据所在的数据库是正确的吗?
  5. 尝试使用 pg_restore -v -U user_name --data-only -h host_name -t table_name -f table_name.sql E:\filename.dump 来获取纯文本恢复到文件 table_name.sql。然后查看文件中的内容。
- Adrian Klaver
@AdrianKlaver 再次感谢 1) 是的 2) 那是一个打字错误 3) 我已经尝试过创建和不创建表格。我更喜欢前者,因为我的总体目标是将数据移动到分区表中 4) 转储和恢复在同一个数据库中 5) 我这样做,得到了一个1kb的文件,主要包含以下文本:SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; 这正确吗? - ASing
表定义应该使用 CREATE TABLE ...,表数据应该使用 COPY ... - Adrian Klaver
1个回答

1

我发现唯一可能导致这种情况的原因是pg_dump和pg_restore之间的表名参数不同。虽然您没有展示它们不同,但您展示的几乎肯定是假的,所以这并不意味着太多。

如果您尝试从没有特定表数据的转储文件中恢复特定表的数据,则不会发生任何事情。pg_restore不是表重命名工具。您可以使用COPY TO和COPY FROM的组合来将表复制到新名称下。


我原本以为dump只是数据。感谢你和@AdrianKlaver的评论,我意识到它包含更多内容。我的目标是将其转储并重新加载到同一数据库中的分区表版本。根据您的评论,我记录了我的步骤,并通过以下方式完成了此操作:1)转储table_1 2)将table_1重命名为table_1_old 3)创建table_1的分区版本,称为table_1 4)将转储还原到新的table_1。 - ASing

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