2008-09-24 10 views
70

मैं PostgreSQL के लिए नया हूँ और मैं एक साधारण सवाल है: मैं एक सरल स्क्रिप्ट है कि एक DB तो मैं कर सकते हैं बनाता है बनाने के लिए कोशिश कर रहा हूँPostgreSQL - psql मैं: कैसे एक दिए गए पथ में स्क्रिप्ट को निष्पादित करने के लिए

बाद में इस तरह इसे कहते:

psql -f createDB.sql 

मैं स्क्रिप्ट, इस तरह (तालिका बनाने, बाधाओं को जोड़ने, कार्य आदि के लिए अलग वाले) अन्य लिपियों कॉल करना चाहते हैं:

\i script1.sql 
\i script2.sql 

यह ठीक है कि प्रदान की काम करता है बनाया था बी.sql में समान डीआईआर है।

लेकिन अब यह इस तरह दिखता है अगर मैं createDB साथ एक के तहत एक निर्देशिका के लिए script2 ले जाते हैं, और संशोधित createDB:

psql:createDB.sql:2: somedir: Permission denied

मैं:

\i script1.sql 
\i somedir\script2.sql 

मैं कोई त्रुटि मिलती है विंडोज़ के लिए पोस्टग्रेस प्लस 8.3 का उपयोग करके, डिफ़ॉल्ट पोस्टगर्स उपयोगकर्ता।

संपादित करें:

बेवकूफ मुझे, यूनिक्स स्लैश समस्या हल हो।

उत्तर

91

पोस्टग्रेर्स लिनक्स/यूनिक्स पर शुरू हुआ। मुझे संदेह है कि इसे ठीक करने के साथ स्लैश को उलटाना।

\i somedir/script2.sql 

आप पूरी तरह से कुछ अर्हता प्राप्त करने के

\i c:/somedir/script2.sql 

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

\i somedir\\script2.sql 
+4

स्लेश को उलटाना पर्याप्त था, भागने आवश्यक नहीं थे। –

+2

नोट का यह है कि आगे की स्लैश विंडोज़ में पूरी तरह मान्य हैं और मूल रूप से समर्थित हैं। तो आप विंडोज़ में लगभग हर जगह आगे slashes का उपयोग कर सकते हैं (खराब लिखित अनुप्रयोगों के अपवाद के साथ)। चूंकि बैकस्लैश को अक्सर बचने वाले चरित्र के रूप में उपयोग किया जाता है, इसलिए इसका व्यवहार अनुप्रयोगों के बीच असंगत होगा और यहां तक ​​कि एक ही एप्लिकेशन के अंदर भी उपयोग किया जाएगा। – Kat

6

क्या आपने यूनिक्स स्टाइल स्लेश (/ के बजाय \) का उपयोग करने का प्रयास किया है?

\ अक्सर एक भागने या कमांड चरित्र होता है, और भ्रम का स्रोत हो सकता है। मुझे इसके साथ कोई समस्या नहीं है, लेकिन मेरे पास विंडोज नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता।

इसके अतिरिक्त, अनुमतियां उपयोगकर्ता द्वारा psql चलाने वाले उपयोगकर्ता पर आधारित हो सकती हैं, या हो सकता है कि उपयोगकर्ता पोस्टमास्टर सेवा निष्पादित कर रहा हो, जांचें कि दोनों ने उस निर्देशिका में उस फ़ाइल को पढ़ा है।

3

इस प्रयास करें, मैं अपने आप को ऐसा करने के लिए काम करते हैं तो

\i 'somedir\\script2.sql' 
0

मैं एक विशिष्ट स्कीमा पर एक एसक्यूएल फ़ाइल को चलाने के खिड़कियों मशीन में इस और उसके काम करने की कोशिश की थी।

psql -h localhost -p 5432 -U username -d databasename -v schema=schemaname < e:\Table.sql

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