PostgreSQL अधिक आउटपुट अक्षम करता है


146

मैं अपने PostgreSQL सर्वर पर एक स्क्रिप्ट चला रहा हूं:

psql db -f sql.sql

से bashया एक cronस्क्रिप्ट में।

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

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

मैं केवल इतना करना चाहता हूं कि डेटा बदल जाए, मुझे किसी आउटपुट की परवाह नहीं है।

जवाबों:


244

पेजिनेशन को अक्षम करने के लिए लेकिन आउटपुट को बनाए रखें , उपयोग करें:

\pset pager off

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

Psql मैनुअल देखें ।

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

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

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


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

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

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

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

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


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

112

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

psql -P pager=off <other params>

आउटपुट दबाए बिना, पेजिंग चीज़ को बंद कर देता है।


4
यह उत्तर मैन पेजों में पी के बारे में किसी भी चीज़ से ज्यादा मददगार था। धन्यवाद!
nortally

मुझे वही चाहिए जो मुझे चाहिए। धन्यवाद :)
प्रदीप दास

13

यहाँ एक और विकल्प है। इसका यह फायदा है कि आपको psql विकल्प के नाम आदि याद नहीं रखने पड़ते हैं।

psql ... | cat

परम शूल! +1
साजा

11

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

(गोले भी एक इनपुट स्ट्रीम है, लेकिन मैं इसे यहाँ अनदेखा कर दूंगा क्योंकि आपने आउटपुट दबाने के लिए कहा था)

इन धाराओं को संख्याओं द्वारा दर्शाया गया है: 1 स्टडआउट के लिए और 2 स्टडर के लिए।

इसलिए यदि आप सिर्फ 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

आप एक धारा को दूसरी धारा में भी पुनर्निर्देशित कर सकते हैं, उदाहरण के लिए stderout to stdout, जो उपयोगी है यदि आप सभी आउटपुट को कहीं और, नियमित और त्रुटियों से बचाना चाहते हैं।

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

आप के बीच रिक्त स्थान नहीं हो सकता है 2>&1

अंत में और कभी-कभी सबसे दिलचस्प तथ्य यह है कि आप सभी आउटपुट को दबाकर उपयोग कर सकते हैं &>, जब आप इसे 'पूरी तरह से शांत' चाहते हैं

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


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

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


2
psql -U user -P pager=off -d database -c 'SQL';

2
आमतौर पर अनाम कोड की कुछ पंक्तियों को पोस्ट करने के बजाय किसी समाधान की व्याख्या करना बेहतर होता है। आप पढ़ सकते हैं कि मैं एक अच्छा उत्तर कैसे लिखूं , और पूरी तरह से कोड-आधारित उत्तरों की व्याख्या करना
Anh Pham
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.