bash
  • postgresql
  • variables
  • 2013-03-06 4302 views 19 likes 
    19

    Làm thế nào để inore một giá trị postarres vô hướng-giá trị trên một biến bash như trong kịch bản dưới đây?lưu trữ kết quả postgresql trong biến bash

    dbname="testlauf" 
    username="postgres" 
    
    vartest='psql -c -d $dbname -U $username -h localhost -p 5432 "SELECT gid FROM testtable WHERE aid='1';"' 
    echo "$vartest" 
    

    Tôi đã thử một số tác phẩm khác nhau, nhưng không có gì có vẻ hiệu quả. Cảm ơn trước.

    +0

    Để thay thế lệnh, bạn phải sử dụng dấu gạch chéo ngược ('\' ') hoặc' $() '. Dấu nháy đơn (''') sẽ không thực hiện. –

    +0

    Cảm ơn. Nhưng ngay cả vartest = '$ (psql -c -d testlauf -U postgres -h localhost -p 5432" SELECT gid FROM testtable WHERE viện trợ = '1'; ")' sẽ không làm các trick unfortunatelly ... nó mang lại cho tôi "sytnac lỗi gần hoặc tại" -d "" Tôi cũng đã thử nó với dbname ... – knutella

    +0

    ..somehow nó nuốt đũa của tôi trong coammands này ... nhưng thực sự tôi đã thêm chúng trước và sau khi một phần 2 của nhiệm vụ. – knutella

    Trả lời

    33

    Đặt tùy chọn -c ngay trước đối số - truy vấn. Tâm trí cũng sử dụng tùy chọn -t bổ sung để chỉ nhận giá trị tuple. Và tất nhiên, sử dụng backticks (`) nhà điều hành.

    Sử dụng tùy chọn -X cũng được khuyến nghị, vì đôi khi tệp .psqlrc có thể thêm một số đầu ra dư thừa, cũng như tùy chọn -A, điều này sẽ vô hiệu hóa căn chỉnh cột (khoảng trắng).

    vartest=`psql -X -A -d $dbname -U $username -h localhost -p 5432 -t -c "SELECT gid FROM testtable WHERE aid='1'"` 
    
    +1

    Cảm ơn rất nhiều Kouber, cái này là lừa! Trên thực tế backticks vẫn không có vẻ làm việc cho tôi, nhưng ($) không: vartest = $ (psql -X -h localhost -p 5432-testlauf -U postgres -c "SELECT gid FROM testtable WHERE aid = '1' ; ") – knutella

    +0

    Cảm ơn. Đang làm việc. –

    0

    Sử dụng tùy chọn -t hoặc --tuples chỉ sẽ cung cấp cho bạn chỉ có các hàng, vì vậy nó sẽ dễ dàng hơn để lưu trữ chúng trong biến mảng (nếu kết quả từ truy vấn nhiều hơn một)

    vartest =(`psql -t -d $dbname -U $username -c "SELECT gid FROM testtable WHERE aid='1';"`) 
    echo $vartest 
    

    dụ:

    kết quả truy vấn

    [email protected]:~$ psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots" 
    barman 
    barman2 
    

    làm cho nó vào biến mảng

    01.
    [email protected]:~$ RESULT=(`psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"`) 
        [email protected]:~$ echo ${RESULT[0]} 
        barman 
        [email protected]:~$ echo ${RESULT[1]} 
        barman2 
    
    Các vấn đề liên quan