美好的一天,
我一直在尝试使用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
答案 0 :(得分:0)
我发现导致此问题的原因。似乎包含表列表的文件中有一个额外的换行符。这导致额外的表参数没有指定表,反过来pg_dump将sys表导出到文件中。我正在搜索avg函数的文件也是错误的文件。