当使用pg_upgrade将PostgreSQL从11升级到13时,在步骤"恢复新集群中的数据库模式"中收到以下错误:
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 3801; 0 0 ACL FUNCTION "pg_stat_statements_reset"() postgres
pg_restore: error: could not execute query: ERROR: role "29648" does not exist
我可以看到pg_restore已经成功恢复了其他数据库和所有自定义表和约束。
在网上搜索后,我可以看到其他人建议使用pg_restore选项"-x,——no-privileges"但是,我没有看到将此应用于pg_upgrade命令的方法。
我尝试使用SELECT * FROM pg_roles;
查找此角色,但无效,但我没有看到rolname或oid为"29648"的角色。
您设法破坏了您的数据库:有一个不存在的用户对函数pg_stat_statements_reset()
的权限。你必须从你的良心或陈述历史中寻找原因。
DROP EXTENSION pg_stat_statements;
CREATE EXTENSION pg_stat_statements;
现在该函数将具有默认权限,并且升级应该没有问题。