2012-06-24 13 views
89

मैं अपने PostgreSQL सर्वर पर चल रही स्क्रिप्ट हूँ अक्षम करें।PostgreSQL अधिक उत्पादन

यह आउटपुट को more या less के साथ पैगनेट करने की कोशिश करता रहता है।

मैं psql में परिणाम पृष्ठांकन कैसे अक्षम करूं?

मैं बस इतना करना चाहता हूं कि डेटा बदल जाए, मुझे किसी भी आउटपुट की परवाह नहीं है। stdout और stderr, क्योंकि इस उत्पादन कहीं निर्देशित कर दिये जाने की आवश्यकता है, लिनक्स एक विशिष्ट नोड /dev/null माध्यम से पहुंच योग्य 'सब कुछ त्यागने' है:

उत्तर

6

बैश, एक shell जा रहा है, 2 streams आपको लगता है कि आउटपुट डेटा अनुप्रेषित कर सकते हैं है। जो कुछ भी आप वहां भेजते हैं वह शून्य में गायब हो जाएगा।

(गोले भी एक इनपुट स्ट्रीम है, लेकिन जब से तुम उत्पादन को दबाने के लिए पूछा है कि मैं इस यहाँ पर ध्यान नहीं देंगे)

इन धाराओं संख्या का प्रतिनिधित्व कर रहे: stdout के लिए stderr के लिए 1 और 2।

तो अगर आप सिर्फ रीडायरेक्ट करना चाहते हैं stdout आपको बस इतना चाहते हैं कि < और > ऑपरेटरों (मूल रूप से जहां यह कहते हैं करने के लिए जहां डाटा को बहती है)

लगता है हम stdout (को अनुप्रेषित को दबाने के लिए चाहते हैं के साथ/देव/नल):

psql db -f sql.sql > /dev/null

आप देख सकते हैं इस stdout डिफ़ॉल्ट, कोई धारा संख्या इस्तेमाल किया गया है अगर आप धारा नंबर का उपयोग करना चाहता था आप

लिखना होता है है

psql db -f sql.sql 1> /dev/null

अब अगर आप stderror को दबाने के लिए चाहते हैं (धारा संख्या 2) आप उपयोग करेंगे

psql db -f sql.sql 2> /dev/null

तुम भी एक से दूसरे धारा अनुप्रेषित सकता stdout के लिए उदाहरण stderror है, जो के लिए, उपयोगी अगर आप कहीं भी सभी आउटपुट, नियमित और त्रुटियों को सहेजना चाहते हैं।के बीच 2>&1

अंत में और कभी कभी सबसे दिलचस्प

psql db -f sql.sql 2>&1 > log.txt

रिक्त स्थान मन तुम वहाँ नहीं हो सकता है कि आप जब आप चाहते हैं यह पूरी तरह से शांत '

&> का उपयोग कर, के लिए की सभी उत्पादन को दबाने सकता है

psql db -f sql.sql &> /dev/null

+1

है, यह, इस विशिष्ट मामले में बिल्कुल काम नहीं करता है क्योंकि psql नहीं भेजता करता है stderr के लिए जानकारीपूर्ण संदेश। वे stdout पर डेटा के साथ intermingled हैं। –

+0

अचानक मुझे एहसास हुआ कि आपका मुद्दा यह है कि सभी आउटपुट दबाने से, पेपर को रोकने के लिए ओपी द्वारा अंतिम '&>' केस का उपयोग किया जा सकता है। यदि आप अपना जवाब किसी भी तरह से संशोधित करते हैं तो मैं अपना डाउनवोट हटा दूंगा। –

153

पृष्ठांकन अक्षम करने के लिए, लेकिन बनाए रखने के उत्पादन, का उपयोग करें:

\pset pager off 

इस सेटिंग को याद करने के लिए, यह आपके ~/.psqlrc में जोड़ें।

the psql manual देखें।

पृष्ठ के पुराने संस्करणों पर यह सिर्फ एक टॉगल था, इसलिए \pset pager

पूरी तरह से दबाने क्वेरी उत्पादन, अपने psql लिपि में \o /dev/null का उपयोग करें।

psql के सूचनात्मक आउटपुट को दबाने के लिए, इसे -q पर चलाएं या पर्यावरण में QUIET=1 सेट करें।


परिणाम और उन्हें दूर फेंक देते हैं आप के साथ /dev/null करने के लिए stdout अनुप्रेषित कर सकते हैं करने के लिए:

psql db -f sql.sql >/dev/null 

आप दोनों stdout और साथ stderr अनुप्रेषित कर सकते हैं:

psql db -f sql.sql >&/dev/null 

लेकिन मुझे नहीं पता अनुशंसा करते हैं, क्योंकि यह त्रुटि जानकारी को फेंक देगा जो आपको चेतावनी दे सकता है कि कुछ सही नहीं हो रहा है। आप परिणाम भी दे रहे हैं और उन्हें फेंक रहे हैं, जो अक्षम है; आप अपने प्रश्नों को समायोजित करके उन्हें पहले स्थान पर नहीं बना रहे हैं।

+0

यह इसे पेजर का उपयोग करने से रोकता है लेकिन यह आउटपुट को रोकता नहीं है, नहीं? मुझे लगता है कि आपको हमेशा उत्पादन को मारने के लिए 'PAGER = "/ dev/null" psql db -P पेजर = हमेशा -f sql.sql' की आवश्यकता होगी। –

+2

नहीं, \ o/dev/null –

67

मैं भी इस बात के लिए देख रहा था, मैं ServerFault पर एक similar question में रास्ता मिल गया:

psql -P pager=off <other params> 

पेजिंग बात बंद हो जाती है, उत्पादन को दबा के बिना।

+1

का उपयोग करें यह उत्तर मैन पेजों में -P के बारे में कुछ भी अधिक उपयोगी था। धन्यवाद! – nortally

+0

यही वही है जो मुझे बिल्कुल चाहिए।धन्यवाद :) –

1

यहां एक और विकल्प है। यह एक ओर जहां यह जानकारी सिद्धांत रूप में आवाज़ है लाभ यह है कि आप psql विकल्प नाम याद करने की जरूरत नहीं है, आदि

psql ... | cat 
+0

पूर्ण प्रोटिप! +1 – sjas