Postgres pg_dump问题

时间:2016-12-14 01:34:38

标签: database postgresql psql pg-dump

美好的一天,

我一直在尝试使用psql客户端恢复转储文件,并且我收到此错误:

psql.bin:/home/user/Desktop/dump/dumpfile.sql:907:
ERROR:  more than one function named "pg_catalog.avg"
CONTEXT:  COPY pg_aggregate, line 1, column aggfnoid: "pg_catalog.avg"

我使用以下命令从另一个Postgres DB(版本:9.4.5)创建了转储文件:

pg_dump --username=pgroot ${tables} --no-owner --no-acl --no-security
--no-tablespaces --no-unlogged-table-data --data-only dbname > dumpfile.sql

其中 $ {tables} 是for:

中的变量
-T table1 -T table2 -T table3 ...

这是因为我正在转储新行分隔文件中列出的特定表。因此,它不是整个数据库,而是我要转储的特定表。

我尝试使用以下命令将转储文件加载到另一个Postgres DB(9.6)中:

psql -d dbname -U superuser -v "ON_ERROR_STOP=1" -f
${DUMP_DIR}dumpfile.sql -1 -a > ${LOG_ERR_DIR}dumpfile.log 
2>${LOG_ERR_DIR}dumpfile.err

这给出了上述错误。似乎发生了这个错误,因为转储文件试图添加函数" pg_catalog.avg"到数据库,它会出现错误,因为它已经存在。

pg_dump生成的sql文件中没有创建pg_catalog.avg函数的地方,所以我不知道为什么会这样。

所以我尝试删除数据库并从template0创建它,但我仍然收到错误。在我看来,这是一个基于以下帖子的错误:

Re: BUG #6176: pg_dump dumps pg_catalog tables

我试图解决这个问题。如果有人可以帮我解决这个问题,请回复?

提前谢谢你, j3rg

1 个答案:

答案 0 :(得分:0)

我发现导致此问题的原因。似乎包含表列表的文件中有一个额外的换行符。这导致额外的表参数没有指定表,反过来pg_dump将sys表导出到文件中。我正在搜索avg函数的文件也是错误的文件。