Postgresql डेटा को अलग ड्राइव पर ले जाना


20

मैं AWS को अपने क्लाउड वातावरण के रूप में उपयोग कर रहा हूं। मैंने अपने रूट इंस्टेंस वॉल्यूम के समान ड्राइव पर PostgreSQL स्थापित किया। मैंने अपने उदाहरण के लिए दूसरी ड्राइव को संलग्न और माउंट किया है। अब मैं अपने सभी PostgreSQL डेटा को अलग ड्राइव पर ले जाना चाहता हूं। मैं अभी भी विकास मोड में हूं इसलिए मैं पुराने डेटा को हटा सकता हूं यदि यह इस समय हस्तांतरण को आसान बनाता है। इसे करने का बेहतरीन तरीका क्या है?

क्या PostgreSQL टेबलस्पेस कुछ ऐसा है जिसे मुझे देखना चाहिए?


1
यदि आप अपने डेटाबेस (एस) के हिस्से को एक अलग ड्राइव पर ले जाना चाहते हैं तो टेबल्सस्पेस जाने का रास्ता होगा ।
इरविन ब्रान्डेसटेटर

यह उत्तर बताता है कि बाहरी हार्ड ड्राइव पर नहीं जाना tablespacesचाहिए : dba.stackexchange.com/a/62037/41823 मुझे यकीन नहीं है कि अगर आप पहले से ही बाहरी पर डेटा डाल रहे हैं, तो मैं जोखिम को समझ सकता हूं?
स्टेटवॉन्क

जवाबों:


19

निम्नलिखित इसे करना चाहिए:

  1. PostgreSQL को शट डाउन करें
  2. सुनिश्चित करें कि PostgreSQL अब नहीं चलता है
  3. जाँच करें कि PostgreSQL वास्तव में बंद है
  4. पुराने डेटा निर्देशिका को नई ड्राइव पर कॉपी करें
    यह आमतौर पर -Dआपकी सेवा के लिए या PGDATAपर्यावरण चर के माध्यम से एक कमांडलाइन पैरामीटर ( ) के माध्यम से परिभाषित किया जाता है ।
  5. नई डेटा निर्देशिका को इंगित करने के लिए अपने PostgreSQL कॉन्फ़िगरेशन (सेवा, पर्यावरण संस्करण) को अपडेट करें।
  6. यदि आपने डेटा की प्रतिलिपि बनाई है, तो यह सुनिश्चित करने के लिए पुरानी डेटा निर्देशिका का नाम बदलें कि PostgreSQL इसे अब नहीं ढूंढ सकता है। यदि आपको कॉन्फ़िगरेशन सही नहीं मिला तो आपको एक त्रुटि संदेश मिलेगा।
  7. सेवा शुरू करें
  8. यदि सब कुछ ठीक चल रहा है, तो आप पुरानी निर्देशिका को हटा सकते हैं।

4 वें बिंदु में, 'आमतौर पर इसे कमांडलाइन पैरामीटर के माध्यम से परिभाषित किया जाता है ...' से क्या मतलब है?
15

@ कोकोडेक: कई अलग-अलग तरीके हैं कि यह कैसे परिभाषित किया जा सकता है। आमतौर पर यह सेवा की परिभाषा का हिस्सा है। लेकिन यह आपके ऑपरेटिंग सिस्टम, वितरण और व्यक्तिगत परिवर्तनों पर निर्भर करता है।
a_horse_with_no_name 15

यह काम किया है, लेकिन मैं विंडोज के लिए कमांड लाइन के बजाय regedit का उपयोग करता हूं। वाह। मेरी डिस्क बस अंतरिक्ष से बाहर निकलने वाली थी, लेकिन अब मेरे पास पर्याप्त जगह के साथ सुरक्षित रूप से कहीं और काम करना है।
खाई

यहाँ विशिष्ट विवरण के साथ अच्छा कदम-दर-चरण ब्लॉग पोस्ट है, विशिष्ट ubuntu और 9.5 DB संस्करण के लिए अप-टू-डेट: digitalocean.com/community/tutorials/…
JaakL

4
  1. Postgresql सेवा बंद करें
  2. cp -a source_data_directory गंतव्य_data_directory
  3. chown -R postgres_user / गंतव्य_data_directory
  4. निर्यात PGDATA = गंतव्य_डेटा_निर्देशिका
  5. Postgresql.conf के भीतर गंतव्य_data_directory को डेटा निर्देशिका बदलना
  6. pg_ctl प्रारंभ

मुझे खुशी है कि आपने chownनए फ़ोल्डर के लिए कमांड को याद किया ।
रोलैंडमाइसीडीडीबीए

0

यहां एक विवरण दिया गया है कि एक मौजूदा पोस्टग्रेक्यूएल डेटाबेस को एक नए स्थान (फ़ोल्डर, विभाजन) पर कैसे स्थानांतरित किया जाए, आर्क लिनक्स पर (यह प्रक्रिया अन्य लिनक्स वितरण के लिए समान होनी चाहिए)।

pg_dumpallएक स्क्रिप्ट फ़ाइल में क्लस्टर के सभी PostgreSQL डेटाबेस को लिखने (डंपिंग) के लिए एक उपयोगिता है। ... यह pg_dumpक्लस्टर में प्रत्येक डेटाबेस के लिए कॉल करके ऐसा करता है । ...

उदाहरण के लिए:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

टीएल / डॉ

आपको:

  • निर्यात ( pg_dumpall) डेटाबेस
  • नई ईएमपीटीवाई निर्देशिका बनाएं
  • Postgresql.conf फ़ाइल संपादित करें
  • पुनरारंभ सर्वर सेवा को पोस्टग्रेट करता है
  • डंप फ़ाइल से पुराने डेटा को नए डेटाबेस में लोड करें

आदेशों का सारांश

मैं अपने शेल प्रॉम्प्ट (होस्टनाम ...) को स्पष्ट करने के लिए छोड़ रहा हूं कि मैं आगे बढ़ने के दौरान किस शेल में हूं।

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

उदाहरण

टिप्पणी कोड और आउटपुट के लिए मेरे साथ वाली ब्लॉग पोस्ट, आर्क लिनक्स पर एक मौजूदा पोस्टग्रेक्यूएल डेटाबेस को कैसे स्थानांतरित करें , देखें ।-।


संदर्भ

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