PostgreSQL

Xem danh sách các cơ sở dữ liệu đã tạo

Xem danh sách cơ sở dữ liệu đã tạo trong PostgreSQL
Được viết bởi Minh Hoàng

Series chia sẻ về PostgreSQL – Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới.

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

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.

Xem danh sách các cơ sở dữ liệu đã tạo - Hình 1

Danh sách các cơ sở dữ liệu đã tạo


2. Lấy từ danh mục hệ thống pg_database

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ư databasestables. 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.

Xem danh sách các cơ sở dữ liệu đã tạo - Hình 2

Danh sách các cơ sở dữ liệu đã tạo

※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:

SELECT datname, 
       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;

Xem danh sách các cơ sở dữ liệu đã tạo - Hình 3

Danh sách các cơ sở dữ liệu đã tạo bao gồm rolname và encoding của cơ sở dữ liệu

Xem thêm: https://www.postgresql.org/docs/current/catalog-pg-authid.html.

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!
0 0 vote
Article Rating

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

guest
1 Comment
Thích nhiều nhất
Mới nhất Cũ nhất
Inline Feedbacks
View all comments
Translate »
1
0
Would love your thoughts, please comment.x