पोस्टग्रेज़ में अनुक्रम तालिका के बिना एक टेबल डंप करें

मेरे पास आईडी कॉलम के साथ टेस्ट नाम की एक टेबल है। और आईडी कॉलम को "test_id_seq" नामक अनुक्रम द्वारा अद्यतन किया गया है। यह परीक्षण तालिका उपयोगकर्ता "ए" द्वारा बनाई गई थी और अन्य उपयोगकर्ता "बी" में पढ़ने की अनुमति है। उपयोगकर्ता "बी" से तालिका के लिए डंप बनाते समय। निम्नलिखित टिप्पणी का उपयोग करना

pg_dump -U B -t test rafiu > test.sql

यह त्रुटि की तरह दिख रहा है

pg_dump: [archiver (db)] क्वेरी विफल हुई: त्रुटि: संबंध test_id_seq के लिए अनुमति अस्वीकार

क्या केवल टेबल को डंप करने का कोई विकल्प है?

3
जोड़ा संपादित
विचारों: 1
मुझे टेबल संरचना और डेटा की आवश्यकता है। क्या यह संभव है।
जोड़ा लेखक Rafiu, स्रोत
अनुक्रम संरचना के हिस्से के रूप में गिना जाता है। अनुक्रम को डंप करने के लिए "बी" अनुमति देने का कोई कारण नहीं है?
जोड़ा लेखक Richard Huxton, स्रोत
आपको वास्तव में किस प्रकार की डंप की आवश्यकता होती है? यदि आपको उपयोगकर्ता बी के लिए भी पहुंच योग्य डेटा की आवश्यकता है, तो --डेटा-केवल विकल्प का उपयोग करें।
जोड़ा लेखक Martin Strejc, स्रोत
मैंने इसे उसी मामले में परीक्षण किया और यह काम करता है। अगर आपके पास एक ही स्कीमा में स्कीमा और अनुक्रम दोनों हैं या यदि आपके पास कोई अन्य सुरक्षा प्रतिबंध नहीं है तो बस सावधानी बरतें। डेटाबेस को जोड़ने के लिए अनुदान का उपयोग करें और डंप को पर्याप्त बनाने के लिए एक टेबल का चयन करें।
जोड़ा लेखक Martin Strejc, स्रोत

2 उत्तर

क्या आपने अनुक्रम को उपेक्षा करने के लिए -T विकल्प का उपयोग करने का प्रयास किया है?

pg_dump -U B -T test_id_seq rafiu > test.sql

यह उस अनुक्रम के बिना एक pgdump लेना चाहिए।

10
जोड़ा

जब अनुक्रम एक कॉलम द्वारा "स्वामित्व" होता है, तो इसे इसके साथ छोड़ दिया जाता है, इसलिए डंप का उत्पादन करने वाले उपयोगकर्ता को इसका उपयोग करने का अधिकार होना चाहिए ( अनुक्रम_नाम पर उपयोगकर्ता नाम पर अनुदान दें )

ऐसा तब होता है जब SERIAL / BIGSERIAL छद्म-डेटाटाइप का उपयोग करते समय होता है। हालांकि, जारी करने के बाद अनुक्रम को कॉलम से बाद में अलग किया जा सकता है:

ALTER SEQUENCE test_id_seq OWNED BY none;

इसके बाद, अनुक्रम के साथ test.ID के लिए डिफ़ॉल्ट मान असाइन करना सामान्य रूप से काम करना जारी रखेगा, लेकिन pg_dump तालिका के साथ अनुक्रम को डंप करने का कोई प्रयास नहीं करेगा।


यदि तालिका को पूर्व-मौजूदा अनुक्रम ( SERIAL का उपयोग नहीं करते) के साथ शुरुआत से बनाया गया है, तो परिणाम वैकल्पिक अनुक्रम की आवश्यकता के बिना समान है।

उदाहरण:

create sequence seq1;
create table test1 (id int default nextval('seq1'));

इस मामले में तालिका को pg_dump -t test1 के साथ डंप किया जाएगा:

CREATE TABLE test1 (
    id integer DEFAULT nextval('seq1'::regclass)
);

seq1 के किसी अन्य संदर्भ के साथ और इसे पढ़ने की अनुमति की आवश्यकता नहीं है।

3
जोड़ा