Twój update_tbl_point
funkcja prawdopodobnie robi coś takiego:
new.last_update = current_timestamp;
ale powinien używać new."Last_Update"
więc napraw funkcję wyzwalacza.
Nazwy kolumn są znormalizowane do małych liter w PostgreSQL (przeciwieństwo tego, co mówi standard SQL), ale identyfikatory w cudzysłowie zachowują swoje litery:
Cytowanie identyfikatora sprawia, że rozróżniana jest wielkość liter, podczas gdy nazwy niecytowane są zawsze składane małymi literami. Na przykład identyfikatory FOO, foo i „foo” są traktowane przez PostgreSQL jako takie same, ale „Foo” i „FOO” różnią się od tych trzech i od siebie nawzajem. (Zwijanie nazw niecytowanych na małe litery w PostgreSQL jest niezgodne ze standardem SQL, który mówi, że nazwy bez cudzysłowów powinny być składane do wielkich liter. Zatem foo powinno być równoważne „FOO”, a nie „foo” zgodnie ze standardem. Jeśli jeśli chcesz pisać aplikacje przenośne, radzimy zawsze cytować określoną nazwę lub nigdy jej nie cytować.)
Jeśli więc to zrobisz:
create table pancakes (
Eggs integer not null
)
wtedy możesz wykonać dowolne z tych czynności:
update pancakes set eggs = 11;
update pancakes set Eggs = 11;
update pancakes set EGGS = 11;
i zadziała, ponieważ wszystkie trzy formularze są znormalizowane do eggs
. Jeśli jednak to zrobisz:
create table pancakes (
"Eggs" integer not null
)
możesz to zrobić:
update pancakes set "Eggs" = 11;
ale nie to:
update pancakes set eggs = 11;
Zwykła praktyka w PostgreSQL polega na używaniu wszędzie identyfikatorów pisanych małymi literami, aby nie trzeba było się tym martwić. Polecam ten sam schemat nazewnictwa również w innych bazach danych, ponieważ konieczność cytowania wszystkiego pozostawia po prostu bałagan podwójnych cudzysłowów (standard), backticków (MySQL) i nawiasów (SQL Server) w twoim SQL, a to nie będzie zaprzyjaźnić się z tobą.