Lên đến Postgres 11 cột được tạo không được hỗ trợ - như được định nghĩa trong tiêu chuẩn SQL và được thực hiện bởi một số RDBMS bao gồm DB2, MySQL và Oracle. Cũng không phải "cột được tính toán" tương tự của SQL Server.
STORED
các cột đã tạo được giới thiệu với Postgres 12 . Ví dụ nhỏ:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db <> fiddle here
VIRTUAL
các cột được tạo có thể đi kèm với một trong các lần lặp tiếp theo. (Chưa có trong Postgres 14).
Có liên quan:
- Ký hiệu thuộc tính cho lệnh gọi hàm gây ra lỗi
Cho đến lúc đó , bạn có thể mô phỏng VIRTUAL
các cột được tạo bằng hàm sử dụng ký hiệu thuộc tính (tbl.col
) trông và hoạt động giống như một cột được tạo ảo . Đó là một chút kỳ lạ về cú pháp tồn tại trong Postgres vì những lý do lịch sử và tình cờ phù hợp với trường hợp. Câu trả lời liên quan này có mã ví dụ :
- Lưu trữ truy vấn chung dưới dạng cột?
Biểu thức (trông giống như một cột) không được bao gồm trong SELECT * FROM tbl
, Tuy nhiên. Bạn luôn phải liệt kê nó một cách rõ ràng.
Cũng có thể được hỗ trợ với chỉ mục biểu thức phù hợp - miễn là hàm IMMUTABLE
. Như:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
Giải pháp thay thế
Ngoài ra, bạn có thể triển khai chức năng tương tự với VIEW
, tùy chọn kết hợp với các chỉ mục biểu thức. Sau đó, SELECT *
có thể bao gồm cột đã tạo.
"Đã tồn tại" (STORED
) các cột được tính toán có thể được triển khai với trình kích hoạt theo cách giống hệt nhau về mặt chức năng.
Lượt xem cụ thể hóa là một khái niệm có liên quan chặt chẽ, được triển khai kể từ Postgres 9.3.
Trong các phiên bản trước, người ta có thể quản lý các MV theo cách thủ công.