2012-09-21 5 views
7

उदाहरण के लिए, मैं एक मेज स्टोर मूल्य:स्टोर PostgreSQL क्वेरी परिणाम शेल के लिए या PostgreSQL चर

select * from myvalue; 

    val 
------- 
12345 
(1 row) 

मैं कैसे PostgreSQL या खोल स्क्रिप्ट में एक चर में इस 12345 बचा सकता है?

यहाँ क्या मैं अपने खोल स्क्रिप्ट में करने की कोशिश की है:

var=$(psql -h host -U user -d db <<SQLSTMT 
SELECT * FROM myvalue; 
SQLSTMT) 

लेकिन echo $var मुझे देता है:

val ------- 12345 (1 row) 

मैं भी psql में

\set var (select * from myvalue) 

की कोशिश की है और जब मैं टाइप \set यह सूचीबद्ध करता है:

var = '(select*frommyvalue)' 

उत्तर

11

नहीं, नहीं, नहीं! का प्रयोग करें "कच्चे डेटा" psql से स्विच, "आयकर" या "\ t" और पाइप क्वेरी बजाय ascii-टेबल पार्स करने की psql करने की तरह है, तुम सच में psql पार्स की जरूरत है :-)

echo 'select * from myvalue;' | psql -t -h host -U user -d db 

पर आते हैं आउटपुट, आप -एच स्विच (एचटीएमएल आउटपुट चालू कर सकते हैं) का उपयोग भी कर सकते हैं, और इसे एचटीएमएल टेबलों को पार्स करने के लिए कुछ पर्ल मॉड्यूल के साथ पार्स कर सकते हैं, मैंने इसे एक या दो बार इस्तेमाल किया .. इसके अलावा, आप कुछ डिफ़ॉल्ट के लिए pgpass file और ~/.psqlrc का उपयोग करना चाह सकते हैं , डिफ़ॉल्ट डीबी कनेक्ट करने के लिए, निर्दिष्ट नहीं होने पर।

+2

@ स्कॉट-मार्लो ने कहा, -ए तालिका आउटपुट संरेखण को हटा देता है। एक ही आउटपुट के लिए उस ध्वज को जोड़ें। –

1

आप परिणाम है कि आप अपने psql कमान के साथ मिलता है फिल्टर कर सकते हैं:

var=$(psql -h host -U user -d db <<SQLSTMT 
SELECT * FROM myvalue; 
SQLSTMT) 
var=$(cut -d' ' -f3 <<<$var) 
6

psql एक -c/--command= कमांड पंक्ति से एसक्यूएल को स्वीकार करने का विकल्प है, और आउटपुट स्वरूपण नियंत्रित करने के लिए -t/--tuples-only का विकल्प।

$ psql -c 'select 1+1' 
?column? 
---------- 
     2 
(1 row) 
$ psql -t -c 'select 1+1' 
     2 

$ VALUE=`psql -t -c 'select 1+1'` 
$ echo $VALUE 
2 
1

this answer में मैं psql के साथ आगे और आगे संवाद करने के लिए सह-प्रक्रिया का उपयोग करके इसे करने का एक तरीका बताता हूं। यदि आपको केवल एक क्वेरी चलाने और एक परिणाम प्राप्त करने की आवश्यकता है तो यह अधिक है, लेकिन यह जानना अच्छा होगा कि क्या आप psql के साथ शेल स्क्रिप्टिंग कर रहे हैं।

3
var=`psql -Atc "select 1;"` 
echo $var 
1