Tentu saja saya bisa melakukannya untuk setiap kolom yang membandingkan seperti ini:
if (old.column1 = new.column1 and old.column2 = new.column2...)
Tapi itu akan sulit dikodekan dan sulit untuk dipertahankan jika saya menambahkan kolom lain di masa depan, misalnya.
Apakah ada cara untuk memeriksa apakah semua kolom tetap sama tanpa memeriksa setiap kolom secara manual?
postgresql
trigger
Mateus Viccari
sumber
sumber
Jawaban:
Anda cukup membandingkan
old
dannew
catatan yang menggunakanis not distinct from
yang menangani nilai NULL dengan benar (jika semua kolom didefinisikan sebagai BUKAN NULL, Anda cukup menggunakan=
atau<>
)Hal yang sama dapat dilakukan untuk memeriksa apakah setidaknya satu kolom berubah:
sumber
old=new
menangani kasus ini persis sepertiold is not distinct from old
. Dengan kata lain, saya tidak dapat menemukan case yangold=new
memberikan hasil NULL. Saya tidak mengharapkan itu!old <> new
tetapi saya tidak sepenuhnya yakin.