Tôi đã hủy một bản sao lưu sạch, không có chủ sở hữu cho Cơ sở dữ liệu Postgres bằng lệnh
pg_dump sample_database -O -c -U
Sau đó, khi tôi khôi phục cơ sở dữ liệu với
psql -d sample_database -U app_name
Tuy nhiên, tôi đã gặp một số lỗi khiến tôi không thể khôi phục dữ liệu:
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
Tôi đã tìm hiểu sâu vào SQL pg_dump
tạo văn bản thuần túy và tôi thấy nó chứa 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';
Tôi nghĩ rằng nguyên nhân là do người dùng app_name
không có đặc quyền để thay đổi public
lược đồ và plpgsql
.
Làm thế nào tôi có thể giải quyết vấn đề này?
plpgsql
, sau đóDROP EXTENSION plpgsql
trước khi bạnpg_dump
. Điều này an toàn hơn việc biến ứng dụng của bạn trở thành siêu người dùng và thuận tiện hơn là bỏ qua các lỗi (nếu bạn sử dụng--single-transaction
hoặc-v ON_ERROR_STOP=1
). Đây là một vấn đề đã biết, [đã được các nhà phát triển Postgres thảo luận nhiều lần | postgresql.org/message-id/… nhưng không cố định kể từ ngày 9.3.