Bài viết này sẽ mô tả cách lấy danh sách lược đồ được tạo trong PostgreSQL.
1. Sử dụng lệnh \dn
Đầu tiên là sử dụng metacommand psql. Để có được danh sách các schema đã tạo, chúng ta thực hiện lệnh \dn sau khi kết nối với cơ sở dữ liệu đích.
Kết nối đến database mydb để kiểm tra xem mydb đang có những schema nào.
\dn
Trong cơ sở dữ liệu mydb hiện được kết nối, ngoài schema public được tạo theo mặc định mỗi khi schema được tạo, thì còn có lược đồ myschema, myschema1 được sở hữu bởi user postgres và lược đồ myschema2, minhhoangblog được sở hữu bởi user minhminh.
Nếu bạn thêm dấu cộng + vào lệnh \dn và thực thi nó, bạn có thể hiển thị thêm các đặc quyền truy cập được thêm vào schema.
\dn+
2. Lấy từ danh mục hệ thống pg_namespace
Tiếp theo là phương pháp lấy từ pg_namespace – một trong những danh mục hệ thống (system catalog) 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ư cơ sở dữ liệu và bảng (table). pg_namespace có các cột sau:
Tên cột | Kiểu dữ liệu | Mô tả |
oid | oid | Định danh – identifier (không thể có được trừ khi được chỉ định) |
nspname | name | Tên của namespace |
nspowner | oid | Owner của namespace |
nspacl | aclitem[] | Danh sách các đặc quyền truy cập (access privileges) |
Sau khi kết nối với cơ sở dữ liệu đích mydb, thử lấy dữ liệu từ pg_namespace
SELECT nspname, nspowner, nspacl FROM pg_namespace;
Chúng ta đã lấy được danh sách các schema có trong cơ sở dữ liệu mydb hiện được kết nối. Trong đó, các schema bắt đầu bằng pg_ được sử dụng bởi hệ thống PostgreSQL và information_schema cũng được sử dụng bởi hệ thống.
Lưu ý rằng nspowner – đại diện cho chủ sở hữu của schema và kết quả trên đang hiển thị giá trị số oid của danh mục hệ thống pg_authid quản lý dữ liệu về role, vì vậy để có được role name thực tế sẽ tham chiếu đến tên rolname của pg_authid.
Thực hiện lệnh như sau:
SELECT nspname, pg_authid.rolname as schemaowner, nspacl
FROM pg_namespace
JOIN pg_authid ON pg_authid.oid = pg_namespace.nspowner;
Chúng ta đã nhận được một danh sách các schema bao gồm tên vai trò (schemaowner) của chủ sở hữu schema.
[…] Xem thêm: Hiển thị danh sách các schema (lược đồ) đã tạo […]