PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

किसी डेटाबेस के सभी तालिकाओं को एक को छोड़कर, दूसरे db के डेटा से बदलें

केवल एक तालिका का बैकअप लेने के लिए, COPY डेटाबेस के अंदर से:

COPY user_tbl TO '/path/to/file';

या pg_dump खोल से:

pg_dump -t user_tbl mydb > user_tbl.sql

फिर डेटाबेस को छोड़ दें, अपना नया संस्करण पुनर्स्थापित करें, खाली user_tbl और इससे कॉपी करें . का उपयोग करें एक तालिका को पुनर्स्थापित करने के लिए:

COPY user_tbl FROM  '/path/to/file';

या के साथ शेल से एक टेबल के साथ बैकअप को पुनर्स्थापित करें psql :

psql -f user_tbl.sql mydb

तालिकाओं के आधार पर पहचानें

त्वरित और गंदा

"कॉपी ... कैस्केड" जैसी कोई चीज नहीं है। निर्भर तालिकाओं की पहचान करने का सबसे सरल तरीका लेनदेन शुरू करना होगा, TRUNCATE tbl CASCADE पर कॉल करें। और आपको मिलने वाली सूचनाओं को रिकॉर्ड करें:

BEGIN;
TRUNCATE user_tbl CASCADE;

NOTICE:  truncate cascades to table "tbl1"
NOTICE:  truncate cascades to table "tbl2"
NOTICE:  truncate cascades to table "tbl3"

फिर लेन-देन को वापस रोल करें - इसलिए वास्तव में कुछ भी नहीं बदलता है:

ROLLBACK;

इससे सावधान। अगर आप COMMIT ट्रंकेट गुजरता है।

धीमा और पक्का

खैर, वास्तव में "धीमा" नहीं है, लेकिन कोड बहुत अधिक जटिल है। हालांकि, यह शामिल तालिकाओं पर एक विशेष लॉक नहीं लेता है, इसलिए यह बहुत साफ और सुरक्षित है:

WITH RECURSIVE x AS (
    SELECT conrelid::regclass
    FROM   pg_constraint
    WHERE  confrelid = 'user_tbl'::regclass

    UNION
    SELECT p.conrelid::regclass
    FROM   x
    JOIN   pg_constraint p ON p.confrelid = x.conrelid
    )
SELECT conrelid::text AS tbl
FROM   x;

रिटर्न:

tbl
------
tbl1
tbl2
tbl3

मैं एक पुनरावर्ती CTE का उपयोग करता हूं (पोस्टग्रेएसक्यूएल 8.4 या बाद के संस्करण की आवश्यकता है) कैटलॉग टेबल पर pg_constraint , क्योंकि प्रत्येक तालिका में बदले में निर्भरताएँ हो सकती हैं।
UNION का उपयोग करें , नहीं सभी यूनियन तालिकाओं के कई मूल्यांकन से बचने के लिए जो प्रत्यक्ष या अप्रत्यक्ष रूप से कई विदेशी कुंजियों से जुड़ी हो सकती हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आईओएस एसडीके 4.2 के साथ libpq संकलित करना

  2. अद्वितीय बाधा को पोस्टग्रेज करता है जो विशिष्टता को लागू नहीं करता है

  3. मौजूदा PostgreSQL डेटाबेस पर TimescaleDB को कैसे सक्षम करें

  4. डेटाबेस से कनेक्ट होने के बाद भूमिका बदलें

  5. पोस्टग्रेज:इसके वर्तमान अधिकतम मान के साथ सभी पूर्णांक कॉलम खोजें