PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kiểm tra xem cơ sở dữ liệu có tồn tại trong PostgreSQL hay không bằng cách sử dụng shell

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 công cụ giám sát truy vấn PostgreSQL hàng đầu

  2. GROUP BY và COUNT trong PostgreSQL

  3. Đặt lược đồ trong PostgreSQL JDBC dường như không hoạt động

  4. PG ::ConnectionBad:fe_sendauth:không cung cấp mật khẩu

  5. Tôi muốn khôi phục cơ sở dữ liệu bằng một giản đồ khác