PostgreSQL এ একটি ডাটাবেসের অনুলিপি তৈরি করা


728

পুরো ডেটাবেস (এর কাঠামো এবং ডেটা) কে পিজএডমিনে কোনও একটিতে অনুলিপি করার সঠিক উপায় কী?

উত্তর:


1120

একটি নতুন ডাটাবেস তৈরি করার সময় পোস্টগ্রিসটি টেমপ্লেট হিসাবে সার্ভারে বিদ্যমান যে কোনও ডাটাবেস ব্যবহারের অনুমতি দেয়। আমি নিশ্চিত নই যে পিজএডমিন আপনাকে তৈরি ডেটাবেস ডায়ালগটিতে বিকল্প দেয় কিনা তবে আপনার যদি একটি কোয়েরি উইন্ডোতে নিম্নলিখিতটি সম্পাদন করতে সক্ষম না হয়:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

তবুও, আপনি পেতে পারেন:

ERROR:  source database "originaldb" is being accessed by other users

ডাটাবেস থেকে অন্যান্য সমস্ত ব্যবহারকারীকে সংযোগ বিচ্ছিন্ন করতে, আপনি এই কোয়েরিটি ব্যবহার করতে পারেন:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();

68
নোট করুন যে এটি কাজ করার জন্য অরিজিনালডিবি নিষ্ক্রিয় হওয়া প্রয়োজন (কোনও লিখিত লেনদেন নয়)।
synecdoche

62
pgAdmin3 এ, অবজেক্ট ব্রাউজারে (বাম) প্যানে, আমি Servers-> (আমার সার্ভার) -> Databases, ডান ক্লিক করে ডেটাবেসগুলি নির্বাচন করতে এবং "নতুন ডাটাবেস" নির্বাচন করতে পারি। বিকল্পগুলির মধ্যে একটি হ'ল টেমপ্লেট, এবং ডাটাবেস তৈরি করতে ব্যবহৃত এসকিউএল সমতুল্য। এটা তাই অনেক দ্রুত একটি ডাম্প চেয়ে / একই সার্ভারে ফিরিয়ে আনুন।
jwhitlock

22
আমি জানি এটি একটি পুরানো প্রশ্নোত্তর, তবে আমি অনুভব করি এটির স্পষ্টতা দরকার: যখন @ সাইনেকডোচে বলেন যে অরিজিনালডিবি অবশ্যই নিষ্ক্রিয় হওয়া উচিত, তার মানে লেখার কোনও সম্ভাবনা নেই। এই ফ্যাশনে একটি ডাটাবেস "অনুলিপি করা" অরিজিনালডিবি লক করে না। পোস্টগ্র্রেএসকিউএল কেবল তখনই অনুলিপিটি শুরু করতে বাধা দেয় যদি সেখানে অনুলিপিডব অ্যাক্সেস করে অন্য কেউ থাকে - অনুলিপিটি শুরু হওয়ার পরে নয়, সুতরাং সম্ভবত "অনুলিপি" সংঘটিত হওয়ার সময় অন্য কোনও সংযোগ ডাটাবেসটি সংশোধন করতে পারে। আইএমএইচও, এটি সবচেয়ে সহজ উত্তর হতে পারে তবে ডাম্প / পুনরুদ্ধার করা "সেরা" হবে use
জোশ

10
আমি এই দেখেছি। @ জোশ: যখন টেক্সট সহ ডেটাবেস তৈরি করে মূল ডিডিবি অনুলিপি করা হচ্ছে, পোস্টগ্র্যাসকিএল এটিতে একটি নতুন সংযোগ তৈরি করার অনুমতি দেয় না, সুতরাং কোনও পরিবর্তন সম্ভব হয় না।
ceteras

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

296

বেলের উত্তরের একটি কমান্ড-লাইন সংস্করণ :

createdb -O ownername -T originaldb newdb

এটি ডাটাবেস মাস্টারের সুবিধার্থে চালানো উচিত, সাধারণত পোস্টগ্রাগেস।


5
এটি একটি দুর্দান্ত কমান্ড createdb: database creation failed: ERROR: source database "conf" is being accessed by other usersতবে আপনি যদি একটি প্রোডাকশন ডাটাবেজে এটি করার চেষ্টা করেন এবং প্রত্যাশার মতো আপনি অনুলিপি তৈরি করতে চান না তবে আপনি পাবেন।
sorin

7
হ্যাঁ, একই আদেশগুলি এই কমান্ডের ক্ষেত্রে প্রযোজ্য ক্রিয়েট ডেটাবেসের অনুরোধে প্রযোজ্য। উপরের বেলের উত্তরের মতামতের মত মন্তব্যগুলি পছন্দ করুন, ডাটাবেসটি নিষ্ক্রিয় হওয়া উচিত।
zbyszek

108

পোস্টগ্রিসের সাথে একটি বিদ্যমান ডাটাবেস ক্লোন করতে আপনি এটি করতে পারেন

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

আইটি ত্রুটি এড়ানোর মাধ্যমে উত্সের সমস্ত সংযোগকে হত্যা করবে

ERROR:  source database "SOURCE_DB" is being accessed by other users

7
অ্যাক্সেস ত্রুটি এড়ানোর জন্য কোনও স্ক্রিপ্ট সমাধান উল্লেখ করার জন্য +1
বধ করুন

14
Postgres 9.2 আমি প্রতিস্থাপন আছে procpidসঙ্গে pidকাজ এই জন্য
marxjohnson

75

উত্পাদনের পরিবেশে, যেখানে মূল ডাটাবেসটি ট্র্যাফিকের আওতায় রয়েছে, আমি কেবল ব্যবহার করছি:

pg_dump production-db | psql test-db

8
এই পদ্ধতির সাথে আমি খুঁজে পেয়েছি যে সমস্যাটি হ'ল নতুন ডাটাবেসে পুনরুদ্ধার সম্পূর্ণ হওয়া অবধি পিজি_ডাম্প তার লেনদেনটি উন্মুক্ত করে রাখবে, এমনকি পিজি_ডাম্প আসলে তার ডাম্প শেষ করে ফেলেছে কিনা। এটি কিছু ক্ষেত্রে লক করার সমস্যা সৃষ্টি করতে পারে (উদাহরণস্বরূপ, যদি ডিডিএল বিবৃতি উত্স ডিবিতে চালিত হয়)।
ক্রিস বাটলার

3
অস্থায়ী মধ্যবর্তী ফাইলগুলি ব্যবহার না করার জন্য প্লাস ওয়ান।
আরডি আরম

এটি আমার সমাধানও ছিল। গতকাল এটি কাজ করেছে, এখন এলোমেলো অনন্য বাধা লঙ্ঘন করা হয়েছে। দ্রষ্টব্য: আমি সমস্ত টেবিলটি রিসিভার ডিবিতে ফেলে দিই।
বন্দুকযাত্রী

1
@ আলেকজান্ডারমিলস pg_dump -s? postgresql.org/docs/current/static/app-pgdump.html
ট্রেগোরেগ

1
এটি ধরে নেওয়া যায় যে পরীক্ষা-ডিবি বিদ্যমান। অন্যথায়, নতুন $ createdb newdb
ডিবিটি

50

পিজিএডমিন সম্পর্কে জানেন না, তবে pgdumpআপনাকে এসকিউএল-তে ডাটাবেসের একটি ডাম্প দেয়। আপনার কেবল একই নামে একটি ডাটাবেস তৈরি করতে হবে এবং করতে হবে

psql mydatabase < my dump

সমস্ত টেবিল এবং তাদের ডেটা এবং সমস্ত অ্যাক্সেস সুবিধাগুলি পুনরুদ্ধার করতে।


ধন্যবাদ, আমার অন্য একটি সার্ভার থেকে একটি ডাম্প তৈরি করার দরকার ছিল এবং এটি মনে হয় এটি সাহায্য করে: postgresql.org/docs/8.3/interactive/…
উদাহরণস্বরূপ

19
আপনি এমনকি করতে পারেন pg_dump -U postgres sourcedb | psql -U postgres newdbযদিও এই কৌশলটির দক্ষতা প্রশ্নবিদ্ধ হতে পারে (যেহেতু আপনি সম্ভবত পড়তে এবং লেখার মধ্যে প্রসঙ্গ পরিবর্তন করতে পারেন)
ফ্রাঙ্ক ফার্মার

1
এমনকি আপনি দূরবর্তী মেশিন থেকে ssh এর মাধ্যমে নিজের ডাম্প পেতে পারেন: ssh dbserver pg_dump DBNAME | psql NEWDB... বা pg_dump DBNAME | ssh otherserver pgsql NEWDB ... অবশ্যই অনুমতি এবং প্রমাণীকরণ হ্যান্ডেল করা দরকার তবে আপনি সেগুলি পরিচালনা করতে চান।
ঘোটি

23

প্রথমত, sudoডাটাবেস ব্যবহারকারী হিসাবে:

sudo su postgres

PostgreSQL কমান্ড লাইনে যান:

psql

নতুন ডাটাবেস তৈরি করুন, অধিকার দিন এবং প্রস্থান করুন:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

পুরানো ডাটাবেস থেকে নতুনটিতে স্ট্রাকচার এবং ডেটা অনুলিপি করুন:

pg_dump old_database_name | psql new_database_name

কিছুটা ত্রুটি (নেটওয়ার্ক ইস্যু) ঘটেছে কি না তা নিশ্চিত করার উপায় কী? মাইগ্রেশনের পরে দুটি ডাটাবেস একই আছে কিনা তা কীভাবে পরীক্ষা করবেন?
বিএই

যখনই সম্মুখীন হয় ত্রুটিগুলি টার্মিনালে প্রদর্শিত হবে। অপারেশনের পরে দুটি ডাটাবেস একই হওয়া উচিত। যাইহোক, আমি কীভাবে এটি চেক করব জানি না ...
ম্যাথিউ রডিক 15'15 20'8

2
একটি কবজির মতো কাজ করে, ডাটাবেসটি তৈরি হওয়ার সময় আমি এটি করেছিলাম।
বায়রোড

এটি ভাল কাজ করে বলে মনে হয়; তবে, দুটি ডাটাবেসের মাধ্যমে ডিস্ক আকার পৃথক রয়েছে \l+। আকারের পার্থক্য কেন?
kosgeinsky

@ কোসজিনস্কি এটির এখানে ব্যাপকভাবে জবাব দেওয়া হয়েছে: dba.stackexchange.com/a/102089/39386
ম্যাথিউ রডিক

18

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

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users

আমার জন্য কী কাজ করেছে তা এখানে রয়েছে ( একটি ফাইলের মধ্যে আউটপুট স্থানান্তরিত করতে এবং সার্ভার সংযোগ বিচ্ছিন্ন করা থেকে সুরক্ষিত করার জন্য কমান্ডগুলি প্রম্পেন্ড করেছেnohup ):

  1. nohup pg_dump exampledb > example-01.sql
  2. createdb -O postgres exampledbclone_01

    আমার ব্যবহারকারী "পোস্টগ্রিজ"

  3. nohup psql exampledbclone_01 < example-01.sql


15

পিজিএডমিনে আপনি আপনার মূল ডাটাবেস থেকে একটি ব্যাকআপ নিতে পারেন এবং তারপরে একটি নতুন ডাটাবেস তৈরি করতে এবং সদ্য তৈরি ব্যাকআপ থেকে পুনরুদ্ধার করতে পারেন:

  1. সোর্স ডাটাবেস, ব্যাকআপ ... রাইট ক্লিক করুন এবং একটি ফাইলে ডাম্প করুন।
  2. ডান ক্লিক করুন, নতুন অবজেক্ট, নতুন ডাটাবেস ... এবং গন্তব্যটির নাম দিন।
  3. নতুন ডাটাবেস, পুনরুদ্ধার ... রাইট ক্লিক করুন এবং আপনার ফাইল নির্বাচন করুন।

আমার কাছে বিদেশী কীগুলির মাধ্যমে সম্পর্কিত টেবিল রয়েছে এবং এটি ঠিক কাজ করেছিল।
র্যান্ডাল ব্লেক

12

পুরো ডেটাবেস (এর কাঠামো এবং ডেটা) কে পিজএডমিনে কোনও একটিতে অনুলিপি করার সঠিক উপায় কী?

উত্তর:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

চেষ্টা এবং পরীক্ষিত.


3
এটি ব্যবহারযোগ্য না হওয়ার জন্য originaldb প্রয়োজন। আইসোমর্ফের পদ্ধতিটি তা করে না।
ব্র্যাডলি

2
একই উত্তরটি আপনার থেকে প্রায় তিন বছর আগে সরবরাহ করা হয়েছিল
জেসন এস

8

ডকুমেন্টেশন থেকে , টেমপ্লেটগুলি ব্যবহার করে createdbবা CREATE DATABASEসহ উত্সাহিত করা হয় না:

যদিও এটি টেমপ্লেট হিসাবে তার নাম নির্দিষ্ট করে টেমপ্লেট 1 ব্যতীত অন্য কোনও ডাটাবেস অনুলিপি করা সম্ভব, এটি সাধারণ-উদ্দেশ্যে "কপি ডেটাবেস" সুবিধা হিসাবে চিহ্নিত (এখনও) নয়। মূল সীমাবদ্ধতা হ'ল টেমপ্লেট ডাটাবেসের অনুলিপি করার সময় অন্য কোনও সেশনগুলি সংযুক্ত হতে পারে না। ক্রিয়েট ডেটাবেস ব্যর্থ হবে যদি অন্য কোনও সংযোগটি এটি শুরু হওয়ার সাথে সাথে উপস্থিত থাকে; অন্যথায়, টেমপ্লেট ডাটাবেসে নতুন সংযোগগুলি ক্রিয়েট ডেটাবেস সম্পূর্ণ না হওয়া পর্যন্ত লক আউট হয়ে যায়।

pg_dumpবা pg_dumpallডাটাবেস এবং সমস্ত ডেটা অনুলিপি করার এক ভাল উপায়। আপনি যদি পিজএডমিনের মতো জিইউআই ব্যবহার করে থাকেন, আপনি ব্যাকআপ কমান্ড কার্যকর করার সময় এই কমান্ডগুলি পর্দার আড়ালে ডাকা হয়। নতুন ডাটাবেসে অনুলিপিটি দুটি পর্যায়ে করা হয়: ব্যাকআপ এবং পুনরুদ্ধার

pg_dumpallPostgreSQL ক্লাস্টারে সমস্ত ডাটাবেস সংরক্ষণ করে। এই পদ্ধতির অসুবিধাটি হ'ল আপনি ডাটাবেস তৈরি করতে এবং ডেটা পপুলেট করার জন্য প্রয়োজনীয় এসকিউএল পূর্ণ একটি খুব বড় টেক্সট ফাইলটি দিয়ে শেষ করুন। এই পদ্ধতির সুবিধা হ'ল আপনি ক্লাস্টারের জন্য সমস্ত ভূমিকা (অনুমতি) বিনামূল্যে পান। সমস্ত ডেটাবেস ডাম্প করতে সুপারসার অ্যাকাউন্ট থেকে এটি করুন

pg_dumpall > db.out

এবং পুনরুদ্ধার করতে

psql -f db.out postgres

pg_dumpকিছু সংক্ষেপণ বিকল্প রয়েছে যা আপনাকে অনেক ছোট ফাইল দেয়। আমার ক্রোন জব ব্যবহার করে দিনে দুবার একটি প্রোডাকশন ডেটাবেস থাকে

pg_dump --create --format=custom --compress=5 --file=db.dump mydatabase

compressসংকোচনের স্তরটি কোথায় (0 থেকে 9) এবং ডাটাবেস তৈরি করতে কমান্ড যুক্ত করতে createবলে pg_dump। ব্যবহার করে পুনরুদ্ধার করুন (বা নতুন ক্লাস্টারে যান)

pg_restore -d newdb db.dump

যেখানে newdb আপনি যে ডাটাবেসটি ব্যবহার করতে চান তার নাম।

অন্যান্য জিনিস সম্পর্কে চিন্তা করা

পোস্টগ্রিএসকিউএল অনুমতি পরিচালনার জন্য রোলগুলি ব্যবহার করে। এগুলি অনুলিপি করা হয় না pg_dump। এছাড়াও, আমরা postgresql.conf এবং pg_hba.conf- এ সেটিংস নিয়ে কাজ করি নি (আপনি যদি অন্য সার্ভারে ডাটাবেস সরিয়ে নিচ্ছেন )। আপনাকে নিজের মত করে কনফিডের সেটিংস বের করতে হবে। তবে ভূমিকাটি ব্যাক আপ করার জন্য আমি একটি কৌশল খুঁজে পেয়েছি for ভূমিকাগুলি ক্লাস্টার স্তরে পরিচালিত হয় এবং আপনি কমান্ড লাইন স্যুইচ pg_dumpallদিয়ে কেবল ভূমিকাগুলি ব্যাকআপ করতে বলতে --roles-onlyপারেন।


7

পোস্টগ্রিএসকিউএল 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

3
এটি সম্ভবত বাস্তবায়িত হয়েছে CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;এবং ফলস্বরূপ প্রয়োজনীয় মূল ডাটাবেসটি নিষ্ক্রিয় থাকতে হবে (লিখিত অ্যাক্সেসের সাথে কোনও সংযোগ নেই) এবং অনুলিপি প্রক্রিয়া চলাকালীন মূল ডাটাবেসে কোনও নতুন সংযোগ প্রতিরোধ করা উচিত। আপনি যদি এতে খুশি হন তবে এটি কাজ করে।
মিক্কো রেন্টালাইনেন

সুন্দর বিস্তারিত। ধন্যবাদ!
আরতা

6

এখনও আগ্রহী ব্যক্তিদের জন্য, আমি একটি বাশ স্ক্রিপ্ট নিয়ে এসেছি যা লেখক যা চেয়েছিল (কমবেশি) করে। আমাকে একটি প্রোডাকশন সিস্টেমে দৈনিক ব্যবসায়ের ডাটাবেস অনুলিপি তৈরি করতে হয়েছিল, এই স্ক্রিপ্টটি কৌশলটি মনে হচ্ছে। ডাটাবেসের নাম / ব্যবহারকারী / pw মান পরিবর্তন করতে ভুলবেন না Remember

#!/bin/bash

if [ 1 -ne $# ]
then
  echo "Usage `basename $0` {tar.gz database file}"
  exit 65;
fi

if [ -f "$1" ]
then
  EXTRACTED=`tar -xzvf $1`
  echo "using database archive: $EXTRACTED";
else
  echo "file $1 does not exist"
  exit 1
fi


PGUSER=dbuser
PGPASSWORD=dbpw
export PGUSER PGPASSWORD

datestr=`date +%Y%m%d`


dbname="dbcpy_$datestr"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;"
dropdbcmp="DROP DATABASE $dbname"

echo "creating database $dbname"
psql -c "$createdbcmd"

rc=$?
if [[ $rc != 0 ]] ; then
  rm -rf "$EXTRACTED"
  echo "error occured while creating database $dbname ($rc)"
  exit $rc
fi


echo "loading data into database"
psql $dbname < $EXTRACTED > /dev/null

rc=$?

rm -rf "$EXTRACTED"

if [[ $rc != 0 ]] ; then
  psql -c "$dropdbcmd"
  echo "error occured while loading data to database $dbname ($rc)"
  exit $rc
fi


echo "finished OK"

5

ডাটাবেস ডাম্প তৈরি করতে

cd /var/lib/pgsql/
pg_dump database_name> database_name.out

ডাটাবেস ডাম্প পুনরায় স্থির করতে

psql -d template1
CREATE DATABASE database_name WITH  ENCODING 'UTF8' LC_CTYPE 'en_US.UTF-8' LC_COLLATE 'en_US.UTF-8' TEMPLATE template0;
CREATE USER  role_name WITH PASSWORD 'password';
ALTER DATABASE database_name OWNER TO role_name;
ALTER USER role_name CREATEDB;
GRANT ALL PRIVILEGES ON DATABASE database_name to role_name;


CTR+D(logout from pgsql console)
cd /var/lib/pgsql/

psql -d database_name -f database_name.out

5

এখানে কেবল pgadmin4 GUI (ব্যাকআপ এবং পুনরুদ্ধার মাধ্যমে) ব্যবহার করে একটি ডাটাবেস অনুলিপি তৈরির সম্পূর্ণ প্রক্রিয়াটি এখানে রয়েছে

পোস্টগ্রিস প্যাগাদমিন 4 নিয়ে আসে। আপনি যদি ম্যাকোস ব্যবহার করেন তবে আপনি CMD+ টিপুন SPACEএবং pgadmin4এটিকে চালাতে টাইপ করতে পারেন। এটি ক্রোমে একটি ব্রাউজার ট্যাব খুলবে।


অনুলিপি করার পদক্ষেপ

1. ব্যাকআপ তৈরি করুন

ডাটাবেস -> "ব্যাকআপ" রাইট ক্লিক করে এটি করুন

এখানে চিত্র বর্ণনা লিখুন

২. ফাইলটির একটি নাম দিন।

লাইক test12345। ব্যাকআপ ক্লিক করুন। এটি একটি বাইনারি ফাইল ডাম্প তৈরি করে, এটি কোনও .sqlফর্ম্যাটে নয়

এখানে চিত্র বর্ণনা লিখুন

৩. এটি কোথায় ডাউনলোড হয়েছে দেখুন

আপনার পর্দার নীচে ডানদিকে একটি পপআপ থাকা উচিত। আপনার ব্যাকআপ কোথায় ডাউনলোড হয়েছে তা দেখতে "আরও বিশদ" পৃষ্ঠাতে ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন

৪. ডাউনলোড করা ফাইলের অবস্থান সন্ধান করুন

এই ক্ষেত্রে, এটি /users/vincenttang

এখানে চিত্র বর্ণনা লিখুন

৫. পেগডমিন থেকে ব্যাকআপ পুনরুদ্ধার করুন

ধরুন আপনি 1 থেকে 4 টি পদক্ষেপটি সঠিকভাবে করেছেন, আপনার কাছে পুনরুদ্ধার করা বাইনারি ফাইল থাকবে। এমন এক সময় আসতে পারে যে আপনার সহকর্মী তাদের স্থানীয় মেশিনে আপনার পুনরুদ্ধার ফাইলটি ব্যবহার করতে চায়। বলেছে ব্যক্তি প্যাগাডমিনে গিয়ে পুনরুদ্ধার করুন

ডাটাবেসটিতে ডান ক্লিক করে এটি করুন -> "পুনরুদ্ধার করুন"

এখানে চিত্র বর্ণনা লিখুন

6. ফাইল অনুসন্ধানকারী নির্বাচন করুন

ম্যানুয়ালি ফাইলের অবস্থানটি নির্বাচন করার বিষয়টি নিশ্চিত করুন, প্যাগডমিনে আপলোডার ক্ষেত্রগুলিতে কোনও ফাইল টেনে টেনে আনবেন না। কারণ আপনি ত্রুটির অনুমতিতে চলে যাবেন। পরিবর্তে, সবেমাত্র তৈরি করা ফাইলটি সন্ধান করুন:

এখানে চিত্র বর্ণনা লিখুন

Said. বলা ফাইলটি সন্ধান করুন

আপনাকে নীচের অংশে ফিল্টারটি "সমস্ত ফাইল" এ পরিবর্তন করতে হতে পারে। এরপরে ফাইলটি সন্ধান করুন step ধাপ থেকে Now এখন নিশ্চিত করতে নীচে "নির্বাচন করুন" বোতামটি চাপুন

এখানে চিত্র বর্ণনা লিখুন

8. ফাইল পুনরুদ্ধার

আপনি নির্বাচিত ফাইলের অবস্থান সহ এই পৃষ্ঠাটি আবার দেখতে পাবেন। এগিয়ে যান এবং এটি পুনরুদ্ধার

এখানে চিত্র বর্ণনা লিখুন

9. সাফল্য

সব কিছু ঠিক থাকলে নীচের ডানদিকে একটি সফল পুনরুদ্ধার দেখানো একটি সূচক পপআপ করা উচিত। প্রতিটি টেবিলে ডেটা যথাযথভাবে পুনরুদ্ধার করা হয়েছে কিনা তা দেখতে আপনি আপনার টেবিলগুলিতে নেভিগেট করতে পারেন।

১০. এটি সফল না হলে:

পদক্ষেপ 9 ব্যর্থ হওয়া উচিত, আপনার ডাটাবেসে আপনার পুরানো পাবলিক স্কিমা মুছতে চেষ্টা করুন। "ক্যোয়ারী সরঞ্জাম" এ যান

এখানে চিত্র বর্ণনা লিখুন

এই কোড ব্লক কার্যকর করুন:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

এখানে চিত্র বর্ণনা লিখুন

এখন আবার 5 থেকে 9 ধাপ চেষ্টা করুন, এটি কার্যকর হওয়া উচিত

সম্পাদনা - কিছু অতিরিক্ত নোট পুনরুদ্ধারকালে "আর্কিভার শিরোনাম 1.14 অসমর্থিত সংস্করণ" এর লাইনে কিছু দিয়ে আপলোড করার সময় আপনি যদি ত্রুটি পেয়ে থাকেন তবে PGADMIN4 আপডেট করুন


3

যদি ডাটাবেসে খোলা সংযোগ থাকে তবে এই স্ক্রিপ্টটি সাহায্য করতে পারে। আমি প্রতি রাতে লাইভ-প্রোডাকশন ডাটাবেসের ব্যাকআপ থেকে একটি পরীক্ষামূলক ডাটাবেস তৈরি করতে এটি ব্যবহার করি। এটি ধরে নিয়েছে যে আপনার কাছে প্রোডাকশন ডিবি থেকে একটি। এসকিউএল ব্যাকআপ ফাইল রয়েছে (আমি এটি ওয়েবমিনে করি)।

#!/bin/sh

dbname="desired_db_name_of_test_enviroment"
username="user_name"
fname="/path to /ExistingBackupFileOfLive.sql"

dropdbcmp="DROP DATABASE $dbname"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = $username "

export PGPASSWORD=MyPassword



echo "**********"
echo "** Dropping $dbname"
psql -d postgres -h localhost -U "$username" -c "$dropdbcmp"

echo "**********"
echo "** Creating database $dbname"
psql -d postgres -h localhost -U "$username" -c "$createdbcmd"

echo "**********"
echo "** Loading data into database"
psql -d postgres -h localhost -U "$username" -d "$dbname" -a -f "$fname"

1

PgAdmin ব্যবহার করে আপনি যে টেম্পলেটটি টেমপ্লেট হিসাবে ব্যবহার করতে চান তা সংযোগ বিচ্ছিন্ন করুন। তারপরে আপনি এটি নতুন ডেটাবেস তৈরি করতে টেমপ্লেট হিসাবে নির্বাচন করেন, এটি ইতিমধ্যে ব্যবহারের ত্রুটিটি এড়িয়ে চলে।


0

আপনি যদি পুরো স্কিমা অনুলিপি করতে চান তবে আপনি নিম্নলিখিত কমান্ডের সাহায্যে একটি পিজি_ডাম্প তৈরি করতে পারেন:

pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password

এবং যখন আপনি এই ডাম্পটি আমদানি করতে চান, আপনি ব্যবহার করতে পারেন:

psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql

সংযোগের স্ট্রিং সম্পর্কে আরও তথ্য: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CNNSTRING

বা তারপরে এটি কেবল একটি লাইনে যুক্ত করুন:

pg_dump -h database.host.com -d postgres -n schema_name -U database_user --password | psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name”

0
  1. পিজিএডমিনে মূল উইন্ডোটি খুলুন এবং তারপরে অন্য কোয়েরি সরঞ্জামগুলির উইন্ডোটি খুলুন
  2. পিজিএডমিনের মূল উইন্ডোগুলিতে,

আপনি "টেম্প্লেড" ডাটাবেসটি সংযুক্ত করুন যা আপনি একটি টেম্পলেট হিসাবে ব্যবহার করতে চান।

  1. অনুসন্ধান সরঞ্জাম উইন্ডো যান

নীচে হিসাবে 2 ক্যুরিয় চালান

SELECT pg_terminate_backend(pg_stat_activity.pid) 
    FROM pg_stat_activity 
    WHERE pg_stat_activity.datname = 'TemplateDB' AND pid <> pg_backend_pid(); 

(উপরের এসকিউএল বিবৃতিটি টেম্পলেটডিবি সহ সমস্ত সক্রিয় অধিবেশন সমাপ্ত করবে এবং তারপরে আপনি এখন নতুন টার্গেটডিবি ডাটাবেস তৈরি করতে এটি টেমপ্লেট হিসাবে বেছে নিতে পারেন, এটি ইতিমধ্যে ব্যবহারের ত্রুটিটি এড়ানো এড়াবে))

CREATE DATABASE 'TargetDB'
  WITH TEMPLATE='TemplateDB'
       CONNECTION LIMIT=-1;

-4

এটা চেষ্টা কর:

CREATE DATABASE newdb WITH ENCODING='UTF8' OWNER=owner TEMPLATE=templatedb LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' CONNECTION LIMIT=-1;

জিএল এক্সডি

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