SORU
27 Ocak 2013, Pazar


Veritabanı kontrol postgreSQL shell kullanan var

Eğer biri varsa postgresql veritabanı olup olmadığını kontrol etmek için kabuk kullanmak mümkün olup olmadığı hakkında bana söylemek mümkün olacağını merak ediyordum?

Bir kabuk programı yapıyorum ve ben sadece zaten var değil mi ama bugüne kadar bunu uygulamak için nasıl görmek mümkün olmamıştır veritabanı oluşturmak istiyor.

Teşekkür ederim

CEVAP
28 Mayıs 2013, Salı


Arturo çözüm aşağıdaki değişiklik kullanın:

psql -lqt | cut -d \| -f 1 | grep -w <db_name> | wc -l


Ne işe yaradığını biliyorum

psql -l aşağıdaki gibi bir şey verir:

                                        List of databases
     Name  |   Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
----------- ----------- ---------- ------------ ------------ -----------------------
 my_db     | my_user   | UTF8     | en_US.UTF8 | en_US.UTF8 | 
 postgres  | postgres  | LATIN1   | en_US      | en_US      | 
 template0 | postgres  | LATIN1   | en_US      | en_US      | =c/postgres           
           |           |          |            |            | postgres=CTc/postgres
 template1 | postgres  | LATIN1   | en_US      | en_US      | =c/postgres           
           |           |          |            |            | postgres=CTc/postgres
(4 rows)

Naif bir yaklaşım kullanarak bir veritabanı arama "Listesi, "" veya "satır" başarılı olur. Access denir demektir Biz yerleşik ilk sütunda sadece arama için komut satırı araçları bir grup ile bu çıkış borusu.


-t bayrak üstbilgi ve altbilgi kaldırır:

 my_db     | my_user   | UTF8     | en_US.UTF8 | en_US.UTF8 | 
 postgres  | postgres  | LATIN1   | en_US      | en_US      | 
 template0 | postgres  | LATIN1   | en_US      | en_US      | =c/postgres           
           |           |          |            |            | postgres=CTc/postgres
 template1 | postgres  | LATIN1   | en_US      | en_US      | =c/postgres           
           |           |          |            |            | postgres=CTc/postgres

Bir sonraki parça, cut -d \| -f 1 | dikey çubuk karakteri (ters eğik çizgi ile kabuk kaçtı) çıkış böler ve alan 1 seçer. Bu yapraklar:

 my_db             
 postgres          
 template0         

 template1         

grep -w bütün kelimeler maçlar, ve eğer öyleyse bu senaryoda temp arıyorsanız uyuşmaz. wc -l sayıları eşleştirme hatları, eğer db varsa getirisi olan 1 ve 0 değil.


Eğer yerine bir çıkış kodu döndürmek yerine çıkış baskı UNIX kuralı takip ederseniz, boru hattından wc damla:

psql -lqt | cut -d \| -f 1 | grep -w <db_name>

Bu boru hattının çıkış durumu öyle olmasa Eğer ... Eğer veritabanı varsa 0 (başarı) olacak ya da 18 ** (hata). Kabuk özel değişken son komutun çıkış durumu 19* *koyacaktır. Ayrıca bu durum, doğrudan bir koşullu test edebilirsiniz:

if psql -lqt | cut -d \| -f 1 | grep -w <db_name>; then
    # database exists
    # $? is 0
else
    # ruh-roh
    # $? is 1
fi

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CareyHolzman

    CareyHolzman

    24 Ocak 2008
  • karneson

    karneson

    23 Temmuz 2006
  • The Brister

    The Brister

    10 ŞUBAT 2008