【发布时间】:2012-11-04 19:50:26
【问题描述】:
我已经使用命令为 Postgres 数据库转储了一个干净的、没有所有者的备份
pg_dump sample_database -O -c -U
后来,当我用
恢复数据库时psql -d sample_database -U app_name
但是,我遇到了几个错误,导致我无法恢复数据:
ERROR: must be owner of extension plpgsql
ERROR: must be owner of schema public
ERROR: schema "public" already exists
ERROR: must be owner of schema public
CREATE EXTENSION
ERROR: must be owner of extension plpgsql
我深入研究了pg_dump 生成的纯文本 SQL,发现它包含 SQL
CREATE SCHEMA public;
COMMENT ON SCHEMA public IS 'standard public schema';
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
我认为原因是用户app_name 没有更改public 架构和plpgsql 的权限。
我该如何解决这个问题?
【问题讨论】:
-
如果你不需要
plpgsql,那么DROP EXTENSION plpgsql在你之前pg_dump。这比让你的应用程序成为超级用户更安全,也比忽略错误更方便(如果你使用--single-transaction或-v ON_ERROR_STOP=1会爆炸)。这是一个已知问题,[由 Postgres 开发人员详细讨论|postgresql.org/message-id/…,但在 9.3 中尚未修复。
标签: postgresql database-backups rails-postgresql