Ini pada 9.3 tapi saya ingat hal-hal serupa terjadi sejak 7.x. Jadi saya membuat database dan menginstal ekstensi plpgsql ke dalamnya. Kemudian saya membuat pg_dump dan sebelum mengembalikannya ke dalam databse saya pastikan juga memiliki ekstensi plpgsql. Kemudian ketika memulihkan ini terjadi:
pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Saya membuat banyak skrip dan cukup penting bagi saya bahwa pg_restore mengembalikan 0, jadi fakta bahwa saya bisa mengabaikan ini tidak ada gunanya. Yang membingungkan saya adalah bahwa IIRC saya perlu membuat ekstensi sebagai pengguna master postgres, jadi saya tidak tahu mengapa semua hal EXTENSION ini berakhir di dump saya. Lagi pula, saya bukan pemilik bahasa / ekstensi?
Lagi pula, saya akan berterima kasih atas saran bagaimana menyingkirkan ini. Harap dicatat, bahwa saya sadar bagaimana switch -l / -L bekerja. Namun ini tampaknya terlalu banyak upaya untuk memperbaiki hanya satu komentar ekstensi sederhana.
sumber
Jawaban:
Bagi siapa pun yang mencari solusinya, membatasi
pg_restore
skema tertentu telah membantu saya mengatasi bug ini. Lihat /programming//a/11776053/11819sumber
-n
benderaAnda dapat melakukan
itu yang saya gunakan untuk mengimpor ke google cloud sql dengan postgres.
edit: menambahkan tanda 'mulai dari garis' untuk tidak mengecualikan baris yang berisi teks literal ini.
sumber
pg_dump | sed 's/DROP EXTENSION/-- DROP EXTENSION/g' | sed 's/CREATE EXTENSION/-- CREATE EXTENSION/g' | sed 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g'
Gunakan
-L
bendera dengan pg_restore setelah mengambil dump dalam format file khusus.Referensi: pg_restore (Dokumentasi PostgreSQL 9.3)
Di sini Anda dapat melihat Inverse benar:
sumber
Untuk hanya mengekspor skema tanpa objek lain dari database Anda dapat menentukan nama skema menggunakan parameter
--schema
sumber