আলাদা নাম সহ কোনও পোস্টগ্রিএসকিউএল ডাটাবেস রফতানি এবং আমদানি করবেন?


39

পোস্টগ্র্রেএসকিউএল ডাটাবেস রফতানি করার পরে কি অন্য নামে এটি আমদানির কোনও উপায় আছে?

আমি রেলগুলির সাথে পোস্টগ্রেএসকিউএল ব্যবহার করছি এবং আমি প্রায়শই উত্পাদন থেকে ডেটা রফতানি করি, যেখানে ডাটাবেসটিকে ব্লাহ_প্রডাকশন বলা হয় এবং এটি বিকাশ বা উন্নয়ন এবং ব্লাহ_স্টেজিংয়ের নামে বিকাশ বা মঞ্চে আমদানি করি। মাইএসকিউএলে এটি তুচ্ছ কারণ রফতানির কোথাও ডাটাবেস নেই (সম্ভবত একটি মন্তব্য ব্যতীত) তবে পোস্টগ্রিসকিউএলে এটি অসম্ভব বলে মনে হচ্ছে। এটা অসম্ভব?

আমি বর্তমানে এইভাবে ডাটাবেসটি ডাম্প করছি:

pg_dump blah > blah.dump

আমি -c বা -C বিকল্পগুলি ব্যবহার করছি না। এই ডাম্পের বিবৃতি যেমন:

COMMENT ON DATABASE blah IS 'blah';

ALTER TABLE public.checks OWNER TO blah;

ALTER TABLE public.users OWNER TO blah;

আমি যখন সাথে আমদানি করার চেষ্টা করি

psql blah_devel < blah.dump

আমি পাই

WARNING:  database "blah" does not exist

ERROR:  role "blah" does not exist

সমস্যা কি আসলেই ডাটাবেসের নয় ভূমিকা?

আমি যদি এটিকে ফেলে রাখি:

pg_dump --format=c blah > blah.dump

এবং এটি এইভাবে আমদানি করার চেষ্টা করুন:

pg_restore -d blah_devel < tmp/blah.psql

আমি এই ত্রুটিগুলি পেয়েছি:

pg_restore: WARNING:  database "blah" does not exist
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 1513; 1259 16435 TABLE checks blah
pg_restore: [archiver (db)] could not execute query: ERROR:  role "blah" does not exist
    Command was: ALTER TABLE public.checks OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1509; 1259 16409 TABLE users blah
pg_restore: [archiver (db)] could not execute query: ERROR:  role "blah" does not exist
    Command was: ALTER TABLE public.users OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1508; 1259 16407 SEQUENCE users_id_seq blah
pg_restore: [archiver (db)] could not execute query: ERROR:  role "blah" does not exist
    Command was: ALTER TABLE public.users_id_seq OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1824; 0 0 ACL public postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  role "postgres" does not exist
    Command was: REVOKE ALL ON SCHEMA public FROM postgres;
pg_restore: [archiver (db)] could not execute query: ERROR:  role "postgres" does not exist
    Command was: GRANT ALL ON SCHEMA public TO postgres;
WARNING: errors ignored on restore: 11

কোন ধারনা?

আমি সেখানে কিছু লোককে ডাম্প সংশোধন করার জন্য সেড স্ক্রিপ্ট ব্যবহার করে দেখেছি। আমি এই সমাধানটি এড়াতে চাই তবে বিকল্প কোনও ব্যবস্থা না থাকলে আমি তা গ্রহণ করব। ডাম্পের ডাটাবেসের নাম পরিবর্তন করার জন্য কেউ কি কোনও স্ক্রিপ্ট লিখেছেন তা নিশ্চিত করে কোনও তথ্য কখনও পরিবর্তন করা হয় না?

উত্তর:


42

সমাধানটি এটি এইভাবে ফেলে দিচ্ছিল:

pg_dump --no-owner --no-acl blah > blah.psql

এবং এটি এর মতো আমদানি করুন:

psql blah_devel < blah.psql > /dev/null

আমি এখনও এই সতর্কতা পেয়েছি:

WARNING:  database "blah" does not exist

কিন্তু বাকি কাজ করে বলে মনে হচ্ছে।


2
আপনি একজন জীবন রক্ষাকারী :)
শ্রী হর্ষ কাপাল

লাইফ সেভার ব্রো :)
আপনি জানেন

11

আপনি যদি কোনও পাঠ্য ডাম্প তৈরি করে থাকেন তবে আপনি CREATE DATABASEবিটগুলি ছাড়াই ডাটাবেসটি রফতানি করতে পারবেন (উদাহরণস্বরূপ -cএবং Cবিকল্পগুলির বিকল্পগুলি pg_dump); এটি পোস্টগ্র্রেসকে ডেটাবেজে ড্রপ, তৈরি এবং সংযোগ দেওয়ার চেষ্টা করতে বাধা দেবে।

আপনি যদি সংরক্ষণাগার বিন্যাসগুলির মধ্যে একটি ব্যবহার করেন তবে আপনি যে ডাটাবেসে পুনরুদ্ধার করতে চান তার নামকরণের -dবিকল্পটি নির্দিষ্ট করতে পারেন pg_restore

ম্যান পেজগুলি pg_dumpএবং pg_restoreআরও তথ্যের জন্য দেখুন, এবং আমি কিছু গুরুত্বপূর্ণ বিবরণ বাদ দিলে উত্পাদন সিস্টেমগুলিতে এটি ব্যবহার করার আগে কোনও স্ক্র্যাচ বানর মাউন্ট করতে ভুলবেন না ।


ধন্যবাদ. আমি -gpg_restore দিয়ে চেষ্টা করব, তবে আমি এই মুহুর্তের জন্য এটি পাঠ্য হিসাবে ফেলে দিচ্ছি এবং pg_dump এ আমি -c বা -C উল্লেখ করছি না। আমি কেবল pg_dump ডাটাবেস নাম কল করছি। আমি কিছু অনুপস্থিত করছি?
pupeno

কোনও বিকল্পের pg_dumpসাহায্যে একটি ডাম্প তৈরি করা উচিত যা আপনি যে কোনও ডাটাবেসে সংযুক্ত রয়েছেন তা পুনরুদ্ধার করবেন (আমি যখন একটি পাঠ্য ডাম্প করেছি এবং একটি ভিন্ন ডিবিতে পুনরুদ্ধার করেছি, তবে পাঠ্য ডাম্পের এসকিউএল যদি নেই CREATEএবং \connectবিট না হয় তবে কার্যকর হবে যেখানেই থাকুন না কেন যখন আপনি তুমি \iডাম্প ফাইল mport।
voretaq7

ডিফল্টরূপে পাঠ্য বা বাইনারি মোডে পিজি_ডাম্পে ডাটাবেসের নামের উল্লেখ রয়েছে।
pupeno

6

এখন pg_restore -d বিকল্প রয়েছে এবং আপনি ডেটা আমদানির জন্য ডাটাবেসের নাম সেট করতে পারেন।

উত্স উপর :

pg_dump -v -Fc mydb.dmp mydb

নিয়তিতে :

madeb -T টেমপ্লেট 1 mydb2

pg_restore -v -e -d mydb2 mydb.dmp


3
এই সিনট্যাক্সটি আমার পক্ষে কাজ করেছে: pg_dump -v -Fc mydb > mydb.dmp(pg_dump v9.4.5)।
পাওলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.