Bài viết này sẽ mô tả cách lấy danh sách cơ sở dữ liệu được tạo trong PostgreSQL.
1. Sử dụng lệnh \l
Đầu tiên, chúng ta sẽ sử dụng metacommand psql để lấy danh sách các database đã tạo bằng cách thực hiện lệnh \l như bên dưới.
2. Lấy từ danh mục hệ thống pg_database
Tiếp theo là phương pháp lấy từ pg_database – một trong những danh mục hệ thống (system catalogs) của PostgreSQL. Danh mục hệ thống là một bảng được sử dụng bởi hệ thống quản lý PostgreSQL và được sử dụng để quản lý thông tin như databases và tables. pg_database có các cột sau:
Tên | Kiểu dữ liệu | Mô tả |
oid | oid | Row identifier |
datname | name | Tên cơ sở dữ liệu |
datdba | oid | Chủ sở hữu của cơ sở dữ liệu, thường là người dùng đã tạo ra nó |
encoding | int4 | Character encoding của cơ sở dữ liệu |
datcollate | name | LC_COLLATE của cơ sở dữ liệu |
datctype | name | LC_CTYPE của cơ sở dữ liệu |
datistemplate | bool | Nếu true, thì cơ sở dữ liệu này có thể được sao chép bởi bất kỳ người dùng nào có đặc quyền CREATEDB; nếu false thì chỉ có superuser hoặc chủ sở hữu cơ sở dữ liệu mới có thể sao chép nó. |
datallowconn | bool | Nếu false thì không ai có thể kết nối với cơ sở dữ liệu này. Điều này được sử dụng để bảo vệ cơ sở dữ liệu template0 khỏi bị thay đổi. |
datconnlimit | int4 | Đặt số lượng kết nối đồng thời tối đa có thể được thực hiện cho cơ sở dữ liệu này. -1 có nghĩa là không có giới hạn. |
datlastsysoid | oid | Hệ thống cuối cùng OID trong cơ sở dữ liệu. Đặc biệt hữu ích cho pg_dump |
datfrozenxid | xid | Tất cả các transaction IDs trước cái này đã được thay thế bằng transaction ID vĩnh viễn (permanent (“frozen”)) trong cơ sở dữ liệu này. Đây là giá trị tối thiểu của các giá trị pg_class.relfrozenxid trên mỗi bảng. |
datminmxid | xid | Tất cả các multixact IDs trước cái này đã được thay thế bằng transaction ID trong cơ sở dữ liệu này. Đây là giá trị tối thiểu của các giá trị pg_class.relminmxid trên mỗi bảng. |
dattablespace | oid | Tablespace mặc định cho cơ sở dữ liệu. Trong cơ sở dữ liệu này, tất cả các bảng mà pg_group.reltablespace bằng 0 sẽ được lưu trữ trong tablespace này. Đặc biệt, tất cả các danh mục hệ thống non-shared sẽ ở đó. |
datacl | aclitem[] | Danh sách quyền truy cập |
Xem thêm: https://www.postgresql.org/docs/current/catalog-pg-database.html.
Bây giờ, chúng ta sẽ thử lấy dữ liệu các cột datname, datdba, encoding, datcollate, datctype từ pg_database.
※Lưu ý: datdba là đại diện cho chủ sở hữu của cơ sở dữ liệu, cũng chính là giá trị oid của danh mục hệ thống pg_authid quản lý dữ liệu về vai trò (roles). Vì thế, chúng ta có thể lấy được rolname của database thông qua system catalog pg_authid để có được tên vai trò thực tế. Và, encoding của database cũng có thể lấy được bằng cách sử dụng hàm pg_encoding_to_char như sau:
pg_authid.rolname as dbrollname,
pg_encoding_to_char(encoding) as dbencoding,
datcollate,
datctype
FROM pg_database
JOIN pg_authid ON pg_authid.oid = pg_database.datdba;[/code]
Xem thêm: https://www.postgresql.org/docs/current/catalog-pg-authid.html.
[…] Xem thêm: Xem danh sách các cơ sở dữ liệu đã tạo. […]