আমি আমার পোস্টগ্রিজ এসকিউএল ডাটাবেসের সাথে একটি ডাম্প পেয়েছি:
pg_dump -U user-name -d db-name -f dumpfile
যা আমি এর সাথে অন্য একটি ডাটাবেসে পুনরুদ্ধার করতে এগিয়ে চলেছি:
psql X -U postgres -d db-name-b -f dumpfile
আমার সমস্যাটি হ'ল ডাটাবেসে রেফারেনশিয়াল সীমাবদ্ধতা, চেক এবং ট্রিগার থাকে এবং এর মধ্যে কিছু (এটি বিশেষত চেকগুলি মনে হয়) পুনরুদ্ধারের সময় ব্যর্থ হয় যেহেতু তথ্যগুলি ক্রমযুক্তভাবে লোড না করা হয় যা এই চেকগুলিকে সম্মানিত করতে পারে। উদাহরণস্বরূপ, কোনও সারণীতে একটি সারি সন্নিবেশ করানো CHECK
এমন কোনও plpgsql
ফাংশনের সাথে কল করে যা শর্তটি অন্য কোনও সম্পর্কযুক্ত টেবিলের মধ্যে রয়েছে কিনা তা পরীক্ষা করে with যদি পূর্ববর্তী টেবিলটি psql
পূর্বের আগে লোড না করা হয় তবে একটি ত্রুটি ঘটে।
নিম্নলিখিতটি এমন একটি এসএসসিসিই যা এমন ডেটাবেস তৈরি করে যা একবার ডাম্প করে pg_dump
পুনরুদ্ধার করা যায় না:
CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$
SELECT EXISTS (SELECT 1 FROM b)
$$ LANGUAGE SQL;
CREATE TABLE IF NOT EXISTS a (
i INTEGER NOT NULL
);
INSERT INTO a(i) VALUES (0),(1);
CREATE TABLE IF NOT EXISTS b (
i INTEGER NOT NULL
);
INSERT INTO b(i) VALUES (0);
ALTER TABLE a ADD CONSTRAINT a_constr_1 CHECK (fail_if_b_empty());
ডাম্প পুনরুদ্ধারের সময় এমন সমস্ত প্রতিবন্ধকতাগুলি (কমান্ড লাইন থেকে) অক্ষম করার এবং পরে আবার তাদের সক্ষম করার কোনও উপায় আছে কি? আমি পোস্টগ্রেএসকিউএল 9.1 চালাচ্ছি।
CHECK
বাধা হিসাবে উল্লেখ করে, তবে সমস্ত গ্যারান্টি খালি করা হবে, কারণ এটি আনুষ্ঠানিকভাবে সমর্থিত নয়, কেবল সহনীয়। তবে CHECK
সীমাবদ্ধতা ঘোষণা NOT VALID
করা আমার পক্ষে এটি সর্বদাই কাজ করে। এমন কোনও কোণার ক্ষেত্রেও থাকতে পারে যা আমি কখনও স্পর্শ করি নি ...
-X
এবং-d
জন্য বিকল্পগুলিpg_dump
।pg_dump
একটি ডাম্প যে উত্পাদন করে হয় একটি খালি ডিবি মধ্যে restorable।