Apakah PostgreSQL mendukung kolom yang dihasilkan ? Juga dikenal sebagai kolom virtual . Saya tidak berbicara tentang IDENTITY
kolom .
Saya tidak dapat menemukan informasi tentang fitur luar biasa ini tetapi saya tahu bahwa itu tersedia di SQL Server, dan dalam versi terbaru dari MariaDB & MySQL.
Fitur ini disebutkan dalam standar SQL: 2003 , dan ada beberapa diskusi di forum PostgreSQL sekitar tahun 2006, tetapi saya tidak dapat menemukan sesuatu yang substansial mengenai masalah ini.
Ada beberapa diskusi tentang SO, tetapi sekarang sudah cukup lama, jadi mungkin sudah ketinggalan zaman.
postgresql
computed-column
Manngo
sumber
sumber
Jawaban:
Tidak yakin apakah ini yang Anda inginkan, tetapi notasi atribut
row.full_name
dan notasi fungsifull_name(row)
setara dalam postgresql.Itu berarti Anda mengambil meja
dan fungsi:
dan menyebutnya seperti ini:
Apakah itu yang kamu butuhkan?
Untuk mempercepat Anda dapat membuat indeks ekspresi:
Atau simpan segala sesuatu dalam tampilan terwujud.
Contoh diambil dari sini: http://bernardoamc.github.io/sql/2015/05/11/postgres-virtual-columns/
sumber
select people.full_name from people
atauselect full_name(people) from people
?Tidak, ini saat ini (pada Postgres 9.6) tidak didukung.
Satu-satunya solusi adalah dengan menggunakan pemicu atau tampilan jika ini adalah perhitungan sederhana yang tidak perlu Anda indeks.
sumber
Iya:
GENERATED ALWAYS AS … STORED
Postgres 12 menambahkan fungsionalitas untuk kolom yang dihasilkan, seperti yang disebutkan dalam SQL: 2003 .
Nilai dihasilkan pada saat suatu
INSERT
atauUPDATE
, kemudian disimpan dengan baris seperti nilai lainnya.Yang dihasilkan harus didasarkan pada kolom dasar dari tabel yang sama, atau pada fungsi yang tidak berubah .
Sintaksnya sederhana, klausa pada
CREATE TABLE
:Contoh:
Fitur:
Peringatan:
Lihat:
sumber
Tergantung pada kasus penggunaan Anda, Anda bisa mencapai perilaku semacam ini dengan mendeklarasikan kolom baru dan mengisinya dengan pemicu pada sisipan / pembaruan.
Saya akan menggunakan jawaban di atas jika mungkin untuk menghindari duplikasi data yang dapat diturunkan dari apa yang sudah Anda miliki, tetapi itu memang melakukan trik dan bisa berguna untuk bidang turunan intensif komputasi yang ingin Anda hitung sekali dan simpan.
Saya menganggap pendekatan ini untuk menangani masalah di mana saya kadang-kadang hanya memiliki 15 digit kunci 18 digit (3 digit terakhir hanya sebuah checksum) tetapi ingin dapat menegakkan hubungan kunci asing.
Dokumen PG tentang pemicu: https://www.postgresql.org/docs/9.6/sql-createtrigger.html
Contoh W3: https://www.w3resource.com/PostgreSQL/postgresql-triggers.php
sumber