Hingga Postgres 11 kolom yang dihasilkan tidak didukung - seperti yang didefinisikan dalam standar SQL dan diimplementasikan oleh beberapa RDBMS termasuk DB2, MySQL dan Oracle. Atau "kolom terhitung" . yang serupa dari SQL Server.
STORED
kolom yang dihasilkan diperkenalkan dengan Postgres 12 . Contoh sepele:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db<>main biola di sini
VIRTUAL
kolom yang dihasilkan mungkin datang dengan salah satu iterasi berikutnya. (Belum ada di Postgres 14).
Terkait:
- Notasi atribut untuk pemanggilan fungsi memberikan kesalahan
Sampai saat itu , Anda dapat meniru VIRTUAL
kolom yang dihasilkan dengan fungsi menggunakan notasi atribut (tbl.col
) yang terlihat dan berfungsi seperti kolom yang dibuat secara virtual . Itu sedikit keanehan sintaks yang ada di Postgres karena alasan historis dan kebetulan sesuai dengan kasusnya. Jawaban terkait ini memiliki contoh kode :
- Simpan kueri umum sebagai kolom?
Ekspresi (tampak seperti kolom) tidak disertakan dalam SELECT * FROM tbl
, meskipun. Anda harus selalu mencantumkannya secara eksplisit.
Dapat juga didukung dengan indeks ekspresi yang cocok - asalkan fungsinya IMMUTABLE
. Seperti:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
Alternatif
Atau, Anda dapat menerapkan fungsi serupa dengan VIEW
, secara opsional digabungkan dengan indeks ekspresi. Kemudian SELECT *
dapat menyertakan kolom yang dihasilkan.
"Bertahan" (STORED
) kolom yang dihitung dapat diimplementasikan dengan pemicu dengan cara yang identik secara fungsional.
Tampilan terwujud adalah konsep yang terkait erat, diimplementasikan sejak Postgres 9.3.
Dalam versi sebelumnya, seseorang dapat mengelola MV secara manual.