एक्सटेंशन को pg_dump स्किप कैसे करें?


16

यह 9.3 पर है लेकिन मैं 7.x के बाद से होने वाली सिमिलर चीजों को याद कर सकता हूं। इसलिए मैं डेटाबेस बनाता हूं और इसमें plpgsql एक्सटेंशन इंस्टॉल करता हूं। बाद में मैं एक pg_dump बनाता हूं और इसे databse में पुनर्स्थापित करने से पहले मैं यह सुनिश्चित करता हूं कि इसमें plpgsql एक्सटेंशन भी हो। तब जब यह बहाल होता है:

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

मैं लिपियों का एक समूह बना रहा हूं और मेरे लिए यह बहुत महत्वपूर्ण है कि pg_restore 0 देता है, इसलिए इस तथ्य को मैं अनदेखा कर सकता हूं कि यह कोई अच्छा काम नहीं कर रहा है। मुझे क्या पहेलियाँ हैं IIRC मुझे मास्टर उपयोगकर्ता को पोस्टग्रेज करने के लिए एक्सटेंशन बनाने की आवश्यकता है, इसलिए मुझे नहीं पता कि मेरे डंप में यह सब सामान क्यों समाप्त होता है। आखिरकार, मैं भाषा / विस्तार का मालिक नहीं हूं?

वैसे भी, मैं किसी भी सुझाव के लिए आभारी रहूँगा कि इससे कैसे छुटकारा पाया जाए। कृपया ध्यान दें, मुझे पता है कि कैसे -l / -L स्विच काम करता है। हालांकि यह सिर्फ एक सरल विस्तार टिप्पणी को सही करने के लिए बहुत अधिक प्रयास करने के लिए लगता है।


3
FWIW, यह पिछले साल की सूचना दी है और बग # 8695 के रूप में चर्चा की है ।
डैनियल वेरिटे

जवाबों:


8

वर्कअराउंड की तलाश में किसी के लिए, pg_restoreएक विशिष्ट स्कीमा तक सीमित करने से मुझे इस बग के आसपास पहुंचने में मदद मिली है। Https://stackoverflow.com/a/11776053/11819 देखें


जब मैं -nध्वज का उपयोग करता था तब भी मेरे पास एक्सटेंशन के मुद्दे थे
Ligemer

5

तुम कर सकते हो

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

यह वही है जो मैं पोस्टग्रेज के साथ Google क्लाउड एसक्यूएल को आयात करने के लिए उपयोग करता हूं।

संपादित करें: इस शाब्दिक पाठ में शामिल लाइनों को बाहर न करने के लिए 'लाइन ऑफ स्टार्ट' कैरेट जोड़ा गया।


2
वह रिकॉर्ड हटा सकता है जिसमें वह पाठ हो, जो होने की संभावना नहीं है, लेकिन आप एक भ्रष्ट स्कीमा को लापता बाधाओं (जैसे कि स्नैपशॉट के अंत में जोड़े जाते हैं) के साथ ले जा सकते हैं। मैं हटाने के बजाय एक "-" उपसर्ग करूंगा, और DROP मामले पर भी विचार करूंगा 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'
एल्विस सिओटी

2

-Lकस्टम फ़ाइल प्रारूप में डंप लेने के बाद pg_restore के साथ ध्वज का उपयोग करें ।

-L --use-list =list-file
list-file

केवल उन संग्रह तत्वों को पुनर्स्थापित करें जिन्हें सूचीबद्ध किया गया है list-fileऔर उन्हें फ़ाइल में दिखाई देने वाले क्रम में पुनर्स्थापित करें। ध्यान दें कि यदि फ़िल्टरिंग स्विच जैसे कि -nया के -tसाथ उपयोग किए जाते हैं -L, तो वे पुनर्स्थापित किए गए आइटम को और प्रतिबंधित कर देंगे।

list-fileआम तौर पर पिछले -lऑपरेशन के आउटपुट को संपादित करके बनाया जाता है । लाइनों को स्थानांतरित या हटाया जा सकता है, और ;लाइन की शुरुआत में एक अर्धविराम ( ) रखकर भी टिप्पणी की जा सकती है ।

संदर्भ: pg_restore (PostgreSQL प्रलेखन 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

यहाँ आप देख सकते हैं उलटा सच है:

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 में आपका स्वागत है। हम आपके योगदान की सराहना करते हैं। मूल प्रश्न पोस्टग्रेएसक्यूएल संस्करण 9.3 के बारे में है। लेकिन आपका मूल उत्तर 9.5 का संदर्भ दे रहा है। संस्करण। मैंने आपके उत्तर को थोड़ा प्रतिबिंबित किया है। हालाँकि, आउटपुट के भाग संस्करण विशिष्ट हो सकते हैं और संस्करण 9.3 में भिन्न हो सकते हैं।
बजे जॉन उर्फ ​​हॉट

0

डेटाबेस के किसी अन्य ऑब्जेक्ट के बिना केवल स्कीमा निर्यात करने के लिए आप पैरामीटर का उपयोग करके स्कीमा का नाम निर्दिष्ट कर सकते हैं --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.