Saya menggunakan modifikasi solusi Arturo berikut:
psql -lqt | cut -d \| -f 1 | grep -qw <db_name>
Apa yang dilakukannya
psql -l menghasilkan sesuatu seperti berikut:
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)
Menggunakan pendekatan naif berarti bahwa pencarian basis data yang disebut "Daftar," Akses "atau" baris "akan berhasil. Jadi kami menyalurkan output ini melalui sekelompok alat baris perintah bawaan untuk hanya mencari di kolom pertama.
The -tbendera menghilangkan header dan footer:
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
Bit berikutnya, cut -d \| -f 1membagi output dengan |karakter pipa vertikal (lolos dari shell dengan backslash), dan memilih bidang 1. Ini meninggalkan:
my_db
postgres
template0
template1
grep -wcocok dengan seluruh kata, sehingga tidak akan cocok jika Anda mencari tempdalam skenario ini. The -qpilihan menekan keluaran ditulis ke layar, jadi jika Anda ingin menjalankan ini secara interaktif pada command prompt Anda mungkin dengan mengecualikan -qjadi sesuatu akan ditampilkan segera.
Perhatikan bahwa grep -wcocok dengan alfanumerik, angka, dan garis bawah, yang merupakan set karakter yang diperbolehkan dalam nama basis data yang tidak dikutip dalam postgresql (tanda hubung tidak legal dalam pengidentifikasi yang tidak dikutip). Jika Anda menggunakan karakter lain, grep -wtidak akan berfungsi untuk Anda.
Status keluar dari seluruh pipa ini akan 0(berhasil) jika database ada atau 1(gagal) jika tidak. Shell Anda akan mengatur variabel khusus $?ke status keluar dari perintah terakhir. Anda juga dapat menguji status secara langsung dalam kondisi:
if psql -lqt | cut -d \| -f 1 | grep -qw <db_name>; then
# database exists
# $? is 0
else
# ruh-roh
# $? is 1
fi
... | grep 0untuk membuat nilai pengembalian shell menjadi 0 jika DB tidak ada dan 1 jika tidak; atau... | grep 1untuk perilaku yang berlawanan