কীভাবে pg_dump এড়িয়ে যেতে পারেন?


16

এটি 9.3 এ রয়েছে তবে আমি 7.x থেকে সিমিলার জিনিসগুলি মনে করতে পারি। সুতরাং আমি এটিতে ডেটাবেস তৈরি এবং plpgsql এক্সটেনশন ইনস্টল। পরে আমি একটি পিজি_ডাম্প তৈরি করি এবং এটি ডেটাবেসে পুনরুদ্ধার করার আগে আমি নিশ্চিত করি যে এটির 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';

আমি একগুচ্ছ স্ক্রিপ্ট তৈরি করছি এবং এটি আমার পক্ষে অত্যন্ত গুরুত্বপূর্ণ যে পিজি_রেস্টোর 0 ফেরত দেয়, তাই আমি কেবল এটিকে এড়িয়ে যেতে পারি যে কোনও ভাল করছে না। আমার কাছে ধাঁধাটি হ'ল আইআইআরসি আমার পোস্টগ্রিস মাস্টার ব্যবহারকারী হিসাবে এক্সটেনশন তৈরি করতে হবে, সুতরাং এই সমস্ত এক্সটেনশান স্টাফগুলি আমার ডাম্পে কেন শেষ হয় তা আমার কোনও ধারণা নেই। সর্বোপরি, আমি ভাষা / সম্প্রসারণের মালিক নই?

যাইহোক, আমি কীভাবে এ থেকে মুক্তি পেতে পারি সে সম্পর্কে কোনও পরামর্শের জন্য আমি কৃতজ্ঞ ull দয়া করে নোট করুন, আমি -l / -L স্যুইচগুলি কীভাবে কাজ করে তা অবগত। এটি কেবলমাত্র একটি সাধারণ এক্সটেনশন মন্তব্য সংশোধন করার পক্ষে অনেক বেশি প্রচেষ্টা বলে মনে হচ্ছে।


3
FWIW, এটি গত বছর রিপোর্ট করা হয়েছে এবং বাগ # 8695 হিসাবে আলোচিত হয়েছে ।
ড্যানিয়েল ভ্যারিট

উত্তর:


8

যে কারও জন্য কর্মসংস্থান খুঁজছেন, pg_restoreএকটি নির্দিষ্ট স্কিমা সীমাবদ্ধ করা আমাকে এই ত্রুটিটি কাছাকাছি পেতে সহায়তা করেছে। Https://stackoverflow.com/a/11776053/11819 দেখুন


আমি -nপতাকাটি ব্যবহার করার সময় আমার কাছে এখনও এক্সটেনশনগুলির সাথে সমস্যা ছিল
লিগমার

5

আপনি করতে পারেন

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

এটি আমি পোস্টগ্রিজ সহ গুগল ক্লাউড এসকিউএল আমদানি করতে ব্যবহার করি।

সম্পাদনা: এই আক্ষরিক পাঠ্যযুক্ত লাইনগুলি বাদ না দেওয়ার জন্য 'লাইনের শুরু' ক্যারেট যুক্ত করা হয়েছে।


2
এটি সেই রেকর্ডটিকে সরিয়ে ফেলতে পারে যা সেই পাঠ্যটি রয়েছে, যা হওয়ার সম্ভাবনা নেই, তবে আপনার অনুপস্থিত সীমাবদ্ধতাগুলির সাথে একটি কলুষিত স্কিমা থাকবে (সেগুলি স্ন্যাপশটের শেষে যুক্ত করা হবে)। আমি অপসারণের পরিবর্তে একটি "-" উপসর্গ করতাম এবং 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 - ব্যবহার-তালিকা =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
--

ডিবিএ.এসই তে স্বাগতম আমরা আপনার অবদান প্রশংসা করি। মূল প্রশ্নটি পোস্টগ্রিজএসকিউএল সংস্করণ 9.3 সম্পর্কিত, তবে আপনার আসল উত্তরটি 9.5 উল্লেখ করছে। সংস্করণ। এটি প্রতিফলিত করার জন্য আমি আপনার উত্তরটি কিছুটা সংশোধন করেছি। যাইহোক, আউটপুট অংশগুলি সংস্করণ নির্দিষ্ট হতে পারে এবং 9.3 সংস্করণে পৃথক হতে পারে।
জন ওরফে হট

0

ডাটাবেসের অন্য কোনও অবজেক্ট ছাড়াই কেবল স্কিমা রপ্তানি করতে আপনি প্যারামিটার ব্যবহার করে স্কিমার নাম নির্দিষ্ট করতে পারেন --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.