2010-08-18 17 views
8

मैं 'psql -U उपयोगकर्ता नाम -W dbname < माइग्रेशन/schema.psql' के साथ PostgreSQL में स्कीमा-डंप आयात करने का प्रयास कर रहा हूं, स्कीमा आंशिक रूप से आयात की जाती है , लेकिन कंसोल त्रुटियों को फेंकता है जैसे "त्रुटि: संबंध तालिका_नाम के लिए अनुमति अस्वीकार" और "त्रुटि: संबंध तालिका_नाम मौजूद नहीं है"।PostgreSQL त्रुटि फेंकता है: "त्रुटि: संबंध तालिका_नाम के लिए अनुमति अस्वीकार कर दी गई है"

मेरे द्वारा बनाए गए इस तरह डेटाबेस: "createdb -O उपयोगकर्ता नाम dbname"

आयात करने के लिए केवल 7 टेबल रहे हैं, और यह सिर्फ उनमें से 3 का आयात के साथ टूट जाता है।

कोई भी संकेत, क्या करना है?

+0

किसी भी "वैकल्पिक स्वामी ..." या "सेट सत्र प्राधिकरण ..." कथन के लिए डंप फ़ाइल की जांच करें। –

उत्तर

3

तो बैकअप "कस्टम" प्रारूप (-Fc) में था, तो आप pg_restore बजाय इस्तेमाल कर सकते हैं तो आप इसे बता सकते हैं स्वामित्व परिवर्तनों को लागू नहीं करने के लिए:

pg_restore -U username -W --no-owner --dbname=dbname migrations/schema.psql 

सभी वस्तुओं "उपयोगकर्ता नाम के साथ बनाया जाएगा "मालिक के रूप में।

इसे छोड़कर, ALTER स्वामी और सेट सत्र प्राधिकरण कमांड को नई फ़ाइल में grep (या पाइप के माध्यम से पाइप के माध्यम से psql के माध्यम से भेजें) को grep करने का प्रयास करें। उन आदेशों को हमेशा सादे-पाठ आउटपुट प्रारूप में एक पंक्ति पर होना चाहिए।

+0

pg_restore SQL टेक्स्ट फ़ाइलों को संभाल नहीं सकता है, केवल pg_dump -Fc (जो संभवतः यह नहीं है) – alvherre

+0

डुह के साथ बनाई गई फ़ाइलें। इसके बारे में भूल गए, मैं अपना जवाब किसी अन्य विचार पर अपडेट कर दूंगा। –

2

कभी-कभी इस तरह की समस्या केस-संवेदनशीलता के मुद्दों के कारण होती है। PostgreSQL सभी unquoted पहचानकर्ता को कम करने के लिए folds; यदि टेबल को ऊपरी अक्षरों वाले उद्धृत नामों के साथ बनाया गया है, तो बाद वाले आदेश जो नाम उद्धृत नहीं करते हैं, वे तालिका को ढूंढने में विफल हो सकते हैं।

अनुमति त्रुटियां एक ही चीज़ से संबंधित हो सकती हैं, या यह पूरी तरह से कुछ और हो सकती है। असफल आदेशों को देखे बिना बताना मुश्किल है।

0

जैसा कि मैं अपनी वेबसाइट पर काम करता हूं, मुझे हर समय यह त्रुटि मिलती है क्योंकि मैं एक टेबल बनाउंगा, टेबल जिसे बाद में कनेक्ट अपाचे/PHP उपयोगकर्ता द्वारा एक्सेस किया जाना आवश्यक है।

एक तालिका है जिसे pg_class नाम दिया गया है जो आपकी तालिकाओं को परिभाषित करता है। इसमें रिलायंस नामक कॉलम शामिल है। सही संख्या के साथ बदलना आपको सही स्वामित्व देगा।

http://linux.m2osw.com/table_owner_in_postgresql

ALTER मालिक ... एक बेहतर समाधान वही चीज़ है, हालांकि PostgreSQL के पुराने संस्करणों में यह नहीं था मौजूद हो सकता है:

मैं इस पृष्ठ पर विवरण है!

+1

मैं पीजी के लिए नया हूँ। लेकिन मैं मालिक बदलने के बारे में सोच रहा था। ऐसे माहौल में जहां मालिक एक प्रशासक है लेकिन एप्लिकेशन ने डीबी तक पहुंच प्रतिबंधित कर दी है, क्या हमारे पास प्रतिबंधित अनुमति वाले उपयोगकर्ता नहीं होना चाहिए? – itsols

+0

हां। यदि आप कार्यान्वयनकर्ता हैं, तो अच्छी अनुमतियों का उपयोग करना एक अच्छा विचार है (जब तक आप इसे खत्म नहीं करते हैं।) जिस प्रणाली का मैं उपयोग कर रहा हूं उसे ड्रूपल कहा जाता है और इसे बनाने, बदलने में पूर्ण अधिकार होने की उम्मीद है , और टेबल हटाना। मेरे दृष्टिकोण के लिए सबसे अच्छा विकल्प नहीं है, लेकिन यह प्रशासकों को सीधे अपनी वेबसाइट से सबकुछ करने की अनुमति देता है (यानी स्थापित, अपग्रेड, मॉड्यूल बनाने, बदलने और हटाने के लिए मॉड्यूल को हटा दें ...) मेरे पास एक और प्रणाली है, हालांकि, जहां फ्रंट एंड में ऐसी कोई अनुमति नहीं है।सभी तालिकाओं का अस्तित्व होना चाहिए और केवल INSERT/UPDATE और कभी-कभी काम हटाएं ... –

+0

@Alexis_Wilke हाँ, मेरे opion में * * उपयोगकर्ता के लिए प्रतिबंधित अनुमतियों का उपयोग करना चाहिए। ड्रूपल के अपने परिदृश्य को देखते हुए, मुझे ऐप को पूर्ण अधिकार देने के लिए डरावना लगता है। यदि किसी उपयोगकर्ता को प्रोग्राम तर्क में कोई दोष मिलता है, तो इसका अर्थ डेटा का अंत हो सकता है। वैसे भी, यह एक और मुद्दा है ... – itsols

संबंधित मुद्दे