ฉันทิ้งข้อมูลสำรองที่สะอาดและไม่มีเจ้าของสำหรับ Postgres Database ด้วยคำสั่ง
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
ฉันขุดลงใน SQL ข้อความธรรมดาที่pg_dump
สร้างขึ้นและฉันพบว่ามันมี 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