PostgreSQL 18 memperkenalkan virtual generated columns, sebuah fitur yang menghitung nilai secara on-demand tanpa menyimpannya di disk. Meskipun kemampuan ini telah menimbulkan antusiasme karena melengkapi set fitur PostgreSQL untuk bersaing dengan kompetitor seperti MySQL, fitur ini juga telah memicu diskusi bermakna di komunitas developer tentang di mana logika database seharusnya berada dan keterbatasan apa yang masih tersisa.
Komunitas Mempertanyakan Alternatif yang Ada
Beberapa developer mempertanyakan apakah virtual generated columns menawarkan keunggulan signifikan dibandingkan fitur PostgreSQL yang sudah ada. Database ini telah lama mendukung function-based virtual columns melalui syntactic sugar, di mana developer dapat membuat fungsi yang mengambil record type tabel sebagai input dan mengembalikan nilai yang dihitung. Namun, pendekatan ini mengharuskan klien untuk mengetahui tentang fungsi-fungsi ini dan tidak menyertakan nilai yang dihitung dalam operasi standar seperti query SELECT *
. Virtual generated columns yang baru terintegrasi lebih mulus ke dalam skema tabel, membuatnya terlihat oleh semua interaksi database tanpa memerlukan pengetahuan khusus dari developer aplikasi.
Perbandingan Virtual vs Stored Generated Columns
Fitur | Virtual Generated Columns | Stored Generated Columns |
---|---|---|
Penyimpanan | Tidak memerlukan penyimpanan disk | Disimpan secara permanen di disk |
Performa | Dihitung pada setiap query | Pembacaan cepat, penulisan lebih lambat |
Pengindeksan | Tidak didukung | Dapat diindeks seperti kolom biasa |
Perubahan Skema | Penambahan instan | Mungkin memerlukan penulisan ulang tabel |
Kasus Penggunaan Terbaik | Ekspresi ringan, fitur eksperimental | Komputasi mahal, data yang sering di-query |
Keterbatasan Menyoroti Kemampuan PostgreSQL yang Hilang
Pengenalan virtual generated columns telah menarik perhatian pada beberapa keterbatasan signifikan dalam arsitektur PostgreSQL saat ini. Generated columns hanya dapat mereferensikan data dalam baris saat ini, mencegah kalkulasi yang lebih kompleks yang mungkin melibatkan baris atau tabel lain. Pembatasan ini telah memperbarui seruan untuk automatic incremental view maintenance, sebuah fitur yang akan memungkinkan database untuk secara efisien memelihara hasil yang dihitung di beberapa tabel.
Stored generated columns akan jauh lebih berguna jika mereka dapat mereferensikan baris dan tabel lain, mereka terbatas hanya pada baris saat ini.
Keterbatasan ini berarti bahwa meskipun virtual generated columns bekerja dengan baik untuk transformasi sederhana seperti konversi case atau ekstraksi field JSON, mereka tidak dapat menangani logika bisnis yang lebih canggih yang memerlukan kalkulasi lintas baris atau lintas tabel.
Keterbatasan Generated Column
- Hanya dapat mereferensikan kolom dalam baris saat ini
- Tidak dapat mereferensikan tabel atau baris lain
- Tidak dapat menggunakan subquery atau fungsi agregat
- Terbatas pada ekspresi deterministik
- Pertimbangan keamanan dengan fungsi kustom dan tipe yang didefinisikan pengguna
Penempatan Logika Aplikasi Tetap Kontroversial
Fitur ini telah menyalakan kembali perdebatan klasik tentang di mana logika komputasional seharusnya berada dalam aplikasi modern. Beberapa developer berpendapat bahwa operasi sederhana seperti manipulasi string seharusnya tetap dalam kode aplikasi daripada didorong ke lapisan database. Mereka melihat virtual generated columns sebagai kompleksitas yang tidak perlu untuk operasi yang mudah diimplementasikan dalam sebagian besar bahasa pemrograman. Yang lain berargumen bahwa memusatkan logika ini dalam database memastikan konsistensi di semua aplikasi dan mengurangi kemungkinan perbedaan implementasi antara berbagai klien yang mengakses data yang sama.
Trade-off Performa Membentuk Pola Penggunaan
Virtual generated columns menyajikan trade-off performa yang jelas dibandingkan dengan stored counterparts mereka. Sementara stored generated columns menambahkan overhead selama operasi write tetapi memungkinkan pembacaan cepat dengan dukungan indexing, virtual columns menjaga writes tetap ringan dengan biaya menghitung nilai selama setiap query. Ini membuat virtual columns sangat menarik untuk fitur eksperimental atau computed fields yang jarang diakses, di mana overhead penyimpanan nilai yang dimaterialisasi akan menjadi pemborosan.
Kemampuan modifikasi skema instan dari virtual columns juga mengatasi kekhawatiran praktis untuk database produksi. Menambahkan virtual columns tidak memerlukan table rewrites atau operasi backfilling, membuatnya lebih aman untuk menguji fitur baru tanpa risiko database locks atau extended maintenance windows.
Virtual generated columns mewakili evolusi berkelanjutan PostgreSQL menuju kelengkapan fitur dengan sistem database utama lainnya. Meskipun mereka mungkin tidak merevolusi desain database, mereka memberikan developer lebih banyak fleksibilitas dalam mengorganisir logika data mereka dan mengurangi overhead penyimpanan yang terkait dengan nilai yang dihitung yang tidak memerlukan indexing atau akses yang sering.
Referensi: My favorite PostgreSQL 18 Feature: Virtual Generated Columns