Postgres có một cách khác để lưu trữ thông tin về nội dung hệ thống. Đây được gọi là Danh mục hệ thống .
Trong Firebird, truy vấn của bạn về cơ bản trả về một hàng cho mọi cột của bảng trong mọi lược đồ với một cột Số nguyên bổ sung ánh xạ tới một kiểu dữ liệu trường.
Trong Postgres bằng cách sử dụng bảng hệ thống trong pg_catalog
lược đồ có thể đạt được điều gì đó tương tự bằng cách sử dụng truy vấn này:
SELECT
TRIM(c.relname) AS table_name, TRIM(a.attname) AS column_name, a.atttypid AS field_type
FROM pg_class c
LEFT JOIN pg_attribute a ON
c.oid = a.attrelid
AND a.attnum > 0 -- only ordinary columns, without system ones
WHERE c.relkind = 'r' -- only tables
ORDER BY 1,2
Truy vấn trên cũng trả về danh mục hệ thống. Nếu bạn muốn loại trừ chúng, bạn cần thêm một JOIN khác vào pg_namespace
và mệnh đề where với pg_namespace.nspname <> 'pg_catalog'
, bởi vì đây là giản đồ nơi lưu trữ danh mục hệ thống.
Nếu bạn cũng muốn xem tên kiểu dữ liệu thay vì số đại diện của chúng, hãy thêm một JOIN vào pg_type
.
Lược đồ thông tin bao gồm bộ sưu tập các quan điểm. Trong hầu hết các trường hợp, bạn không cần toàn bộ truy vấn SQL đứng đằng sau dạng xem, vì vậy việc sử dụng bảng hệ thống sẽ mang lại cho bạn hiệu suất tốt hơn. Tuy nhiên, bạn có thể kiểm tra định nghĩa dạng xem, chỉ để bắt đầu với các bảng và điều kiện được sử dụng để tạo kết quả đầu ra.