Saya memiliki database Postgresql 8.1. Dalam satu meja, ada tiga kolom: first_name
, last_name
, display_name
.
Apakah mungkin untuk menetapkan nilai default display_name
menjadi first_name + " " + last_name
?
postgresql
MattSayar
sumber
sumber
Jawaban:
Gunakan pemicu.
Berikut beberapa kode yang dapat Anda gunakan sebagai basis. Jika Anda juga perlu menangani UPDATE, hanya perubahan kecil diperlukan.
sumber
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
menangani pembaruan?Anda tidak perlu benar-benar menyimpan nilai; Anda dapat membuat fungsi yang dapat dirujuk seperti kolom yang dibuat. Satu peringatan adalah bahwa referensi harus selalu memenuhi syarat dengan tabel atau nama alias.
Hasil:
Anda bahkan dapat mengindeks nilai yang dihasilkan, termasuk menggunakan pencarian KNN berdasarkan kesamaan trigram. Sebagai contoh:
Jenis pencarian ini mengembalikan baris dari pemindaian indeks dengan urutan "jarak" dari string pencarian. Jika Anda ingin melihat seberapa "dekat" mereka, Anda bisa menggunakan operator jarak (
<->
) atausimilarity()
fungsinya (yaitu 1 - jarak). Pencarian KNN dapat mengembalikan K "tetangga terdekat" dengan sangat cepat, bahkan dengan kumpulan data yang sangat besar.sumber
last_name
sebagaiNOT NULL
contoh saya. :-) Kami memiliki kolom nama seperti itu yang ada di tabel dan dikelola oleh pemicu dan beralih ke pendekatan ini tanpa banyak kesulitan, tetapi kerangka kerja kami selalu menggunakan alias dan selalu memenuhi syarat referensi, sehingga bagian itu mudah. Jika Anda memiliki kode yang tidak konsisten tentang referensi kolom yang memenuhi syarat, saya bisa melihat di mana sulitnya melacak semua kasus tersebut.Dengan pengaturan DEFAULT pada tabel kolom, tidak.
Taruhan terbaik Anda di sini adalah TRIGGER dengan nilai BARU untuk setiap kolom yang ingin Anda hitung.
sumber