2012-09-18 13 views
6

कभी-कभी psql में मेरे आदेशों का कोई प्रभाव नहीं पड़ता है। कोई विचार क्यों? इस के बादpsql में, कुछ आदेशों का कोई प्रभाव क्यों नहीं पड़ता है?

library_development => \ घ

   List of relations 
Schema |  Name  | Type | Owner 
--------+-------------------+-------+---------- 
public | Pavan    | table | postgres 
public | schema_migrations | table | sai 
(2 rows) 

मैं मेज Pavan गिरा का उपयोग कर:

नीचे

डेटाबेस library_development में सभी तालिकाओं की सूची है

library_development-> drop table Pavan 

लेकिन तालिका को ड्रॉप नहीं है और अपने शो दिखाया गया है:

library_development=> \d 
       List of relations 
Schema |  Name  | Type | Owner 
--------+-------------------+-------+---------- 
public | Pavan    | table | postgres 
public | schema_migrations | table | sai 
(2 rows) 
इसके अलावा

:

  1. मैं Windows में PostgreSQL का उपयोग कर रहा हूँ। कंसोल को साफ़ करने के लिए कोई आदेश है (ओरेकल में सीएल स्क्रू की तरह)?

  2. क्या डीएमएल स्क्रिप्ट के साथ काम करते समय मुझे "प्रतिबद्ध" की कोई अवधारणा पोस्टग्रेस्क्ल में करने की ज़रूरत है ??

+0

कोशिश अर्धविराम 'ड्रॉप तालिका पवन के साथ समाप्त करने के लिए,' – edze

+0

इस तरह प्रश्न पोस्ट जब यह आम तौर पर एक अच्छा विचार है अपने PostgreSQL संस्करण का उल्लेख है। स्पष्ट रूप से क्या हो रहा है यह दिखाने के लिए +1। –

उत्तर

14

अर्धविरामों के साथ वक्तव्य समाप्त होता है।

psql में, अर्धविराम के बिना प्रवेश दबाकर अगली पंक्ति पर बयान जारी है, जो आपने इसे निष्पादित करने के बजाय क्वेरी बफर में लिखा था। आप देखेंगे कि संकेत dbname=> से dbname-> से संकेत मिलता है कि आप निरंतरता रेखा पर हैं।

regress=> DROP TABLE sometable 
regress-> \r 
Query buffer reset (cleared). 
regress=> DROP TABLE sometable; 
ERROR: table "sometable" does not exist 
regress=> 

सूचना कैसे के बाद मैं Enter दबाएँ अर्धविराम के बिना, regress-# को शीघ्र परिवर्तन और कोई कार्रवाई नहीं की है। कोई तालिका sometable नहीं है, इसलिए यदि कथन चलाया गया था तो एक त्रुटि की सूचना दी जाएगी।

अगला, अगली पंक्ति पर \r का उपयोग देखें? यह क्वेरी बफर को साफ़ करता है। ध्यान दें कि जब बफर साफ़ किया जाता है तो प्रॉम्प्ट regress=# पर वापस बदल जाता है, क्योंकि अब कोई आंशिक कथन बफर्ड नहीं किया गया है।

यह दिखाता है कि बयान पंक्तियों में विभाजित किया जा सकता:

regress=> DROP TABLE 
regress-> sometable 
regress-> ; 
ERROR: table "sometable" does not exist 

भ्रामक बात यह है कि psql बैकस्लैश आदेश \d तरह न्यू लाइन-समाप्त, समाप्त अर्धविराम नहीं हैं, इसलिए वे रन कर जब आप एंटर दबाएं । जब आप एक कथन लिखते समय तालिका परिभाषा देखना चाहते हैं तो यह आसान है, लेकिन यह नए आने वालों के लिए थोड़ा उलझन में है।

अपने अतिरिक्त प्रश्न के लिए के रूप में:

  1. अगर वहाँ psql में एक "स्पष्ट स्क्रीन" कमांड विंडोज के लिए मैं इसे अभी तक नहीं मिला है है। लिनक्स पर मैं केवल नियंत्रण-एल का उपयोग करता हूं, जैसा कि किसी अन्य रीडलाइन-प्रोग्राम का उपयोग करता है। विंडोज़ में शायद \! cls काम करेगा, लेकिन मैंने कोशिश नहीं की है।

  2. PostgreSQL में डीडीएल लेनदेन है। आप लेनदेन BEGIN लेनदेन कर सकते हैं, कुछ डीडीएल जारी कर सकते हैं, और COMMIT लेनदेन को प्रभावी होने के लिए। यदि आप अपने डीडीएल को एक स्पष्ट लेनदेन में नहीं करते हैं तो यह तुरंत प्रभावी होता है।

+0

स्पष्ट स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। – Pawan

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

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