Pg_dump atlama uzantısını nasıl yapabilirim?


16

Bu 9.3'te ama 7.x'ten beri olan benzer şeyleri hatırlayabiliyorum. Ben veritabanı oluşturmak ve içine plpgsql uzantısı yükleyin. Daha sonra bir pg_dump oluşturun ve veritabanına geri yüklemeden önce de plpgsql uzantısı olduğundan emin olun. Sonra bunu geri yüklerken olur:

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';

Bir sürü komut dosyası oluşturuyorum ve pg_restore'un 0 döndürdüğü benim için oldukça önemli, bu yüzden bunu görmezden gelebilmem iyi bir şey değil. Ne bulmaca beni postrres ana kullanıcı olarak uzantı oluşturmak gerekir IIRC olduğunu, bu yüzden neden tüm bu UZATMA şeyler benim döküm sona erer hiçbir fikrim yok. Sonuçta, dilin / uzantının sahibi değil miyim?

Her neyse, bundan nasıl kurtulacağına dair herhangi bir öneri için minnettar olurum. -L / -L anahtarlarının nasıl çalıştığını bildiğimi lütfen unutmayın. Ancak bu basit bir uzantı yorumunu düzeltmek için çok fazla çaba gibi görünüyor.


3
FWIW, bu geçen yıl bildirildi ve hata # 8695 olarak tartışıldı .
Daniel Vérité

Yanıtlar:



5

Yapabilirsin

pg_dump ... | grep -v -E '^(CREATE\ EXTENSION|COMMENT\ ON)' >out.sql

postgres ile google bulut sql almak için kullandığım şey bu.

edit: bu değişmez metni içeren satırları hariç tutmak için 'satır başı' düzeltme işareti eklendi.


2
bu metni içeren kaydı kaldırabilir, bu gerçekleşme olasılığı düşüktür, ancak eksik kısıtlamalara sahip bir şemaya sahip olursunuz (anlık görüntünün sonuna eklendiklerinden). Çıkarmak yerine bir "-" önekini 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'
eklerdim

2

-LÖzel dosya biçiminde bir döküm aldıktan sonra pg_restore ile bayrağı kullanın .

-L --kullanım listesi =list-file
list-file

Yalnızca içinde listelenen arşiv öğelerini list-filegeri yükleyin ve dosyada göründükleri sırayla geri yükleyin. Filtreleme anahtarları -nveya -tile birlikte kullanılırsa -L, geri yüklenen öğeleri daha da kısıtlayacaklarını unutmayın.

list-filenormalde önceki bir -lişlemin çıktısını düzenleyerek oluşturulur . Çizgiler taşınabilir veya kaldırılabilir ve ;satır başına noktalı virgül ( ) yerleştirilerek de yorum yapılabilir . [...]

Referans: pg_restore (PostgreSQL Belgeleri 9.3)

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep -v 'COMMENT - EXTENSION' | \
    grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump

Burada Tersin doğru olduğunu görebilirsiniz :

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep 'COMMENT - EXTENSION' | grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.4.15
-- Dumped by pg_dump version 9.5.14

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- PostgreSQL database dump complete
--

DBA.SE'ye Hoşgeldiniz. Katkınız için teşekkür ederiz. Orijinal soru PostgreSQL sürüm 9.3 ile ilgilidir, ancak orijinal cevabınız 9.5'e atıfta bulunuyordu. sürümü. Cevabınızı bunu yansıtacak şekilde biraz değiştirdim. Ancak, çıktının bölümleri sürüme özgü olabilir ve sürüm 9.3'te farklı olabilir.
John aka hot2use

0

Veritabanının başka bir nesnesi olmadan yalnızca şemayı dışa aktarmak için, şemanın adını parametresini kullanarak belirtebilirsiniz. --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.