Lưu ý / Cập nhật (2021):Trong khi câu trả lời này hoạt động , về mặt triết học, tôi đồng ý với các ý kiến khác rằng cách thích hợp để làm điều này là hỏi Postgres .
Kiểm tra xem các câu trả lời khác có psql -c
hay không hoặc --command
trong đó chúng phù hợp hơn với trường hợp sử dụng của bạn (ví dụ:biến thể của Nicholas Grilly, Nathan Osman, bruce hoặc Pedro
Tôi sử dụng sửa đổi sau của giải pháp Arturo:
psql -lqt | cut -d \| -f 1 | grep -qw <db_name>
Nó làm gì
psql -l
kết quả như sau:
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)
Sử dụng cách tiếp cận đơn giản có nghĩa là tìm kiếm cơ sở dữ liệu có tên "Danh sách," Truy cập "hoặc" hàng "sẽ thành công. Vì vậy, chúng tôi chuyển kết quả đầu ra này thông qua một loạt các công cụ dòng lệnh tích hợp để chỉ tìm kiếm trong cột đầu tiên.
-t
cờ xóa đầu trang và chân trang:
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 tiếp theo, cut -d \| -f 1
chia đầu ra bằng dấu ống đứng |
ký tự (thoát khỏi trình bao bằng dấu gạch chéo ngược) và chọn trường 1. Điều này để lại:
my_db
postgres
template0
template1
grep -w
đối sánh toàn bộ từ và vì vậy sẽ không khớp nếu bạn đang tìm kiếm temp
trong kịch bản này. -q
tùy chọn ngăn chặn bất kỳ đầu ra nào được ghi vào màn hình, vì vậy nếu bạn muốn chạy điều này một cách tương tác tại dấu nhắc lệnh, bạn có thể loại trừ -q
vì vậy một cái gì đó sẽ được hiển thị ngay lập tức.
Lưu ý rằng grep -w
khớp chữ và số, chữ số và dấu gạch dưới, chính xác là tập hợp các ký tự được phép sử dụng trong các tên cơ sở dữ liệu chưa được trích dẫn trong postgresql (dấu gạch ngang không hợp pháp trong các số nhận dạng chưa được trích dẫn). Nếu bạn đang sử dụng các ký tự khác, hãy grep -w
sẽ không phù hợp với bạn.
Trạng thái thoát của toàn bộ đường dẫn này sẽ là 0
(thành công) nếu cơ sở dữ liệu tồn tại hoặc 1
(thất bại) nếu nó không. Trình bao của bạn sẽ đặt biến đặc biệt $?
đến trạng thái thoát của lệnh cuối cùng. Bạn cũng có thể kiểm tra trạng thái trực tiếp trong điều kiện:
if psql -lqt | cut -d \| -f 1 | grep -qw <db_name>; then
# database exists
# $? is 0
else
# ruh-roh
# $? is 1
fi