Oczywiście mógłbym to zrobić dla każdej kolumny, porównując w ten sposób:
if (old.column1 = new.column1 and old.column2 = new.column2...)
Ale na przykład byłoby to mocno zakodowane i trudne do utrzymania, jeśli dodam inną kolumnę w przyszłości.
Czy istnieje sposób sprawdzenia, czy wszystkie kolumny pozostają takie same bez ręcznego sprawdzania poszczególnych kolumn?
postgresql
trigger
Mateus Viccari
źródło
źródło
Odpowiedzi:
Możesz po prostu porównać rekordy
old
i, zanew
pomocąis not distinct from
których poprawnie obsługuje wartości NULL (jeśli wszystkie kolumny są zdefiniowane jako NOT NULL, możesz po prostu użyć=
lub<>
)To samo można zrobić, aby sprawdzić, czy zmieniła się co najmniej jedna kolumna:
źródło
old=new
tak samo jest ze skrzynkąold is not distinct from old
. Innymi słowy, nie mogłem znaleźć przypadku, w którym dałobyold=new
wynik NULL. Nie spodziewałem się tego!old <> new
ale nie jestem do końca pewien.