Dit update_tbl_point
funktion gør sandsynligvis noget som dette:
new.last_update = current_timestamp;
men den burde bruge new."Last_Update"
så ret din triggerfunktion.
Kolonnenavne er normaliseret til små bogstaver i PostgreSQL (det modsatte af, hvad SQL-standarden siger, vel at mærke), men identifikatorer, der er dobbelte anførselstegn, bevarer deres store og små bogstaver:
Citering af en identifikator gør den også følsom over for store og små bogstaver, hvorimod navne uden anførselstegn altid foldes med små bogstaver. For eksempel betragtes identifikatorerne FOO, foo og "foo" som de samme af PostgreSQL, men "Foo" og "FOO" er forskellige fra disse tre og hinanden. (Foldningen af navne uden anførselstegn til små bogstaver i PostgreSQL er inkompatibel med SQL-standarden, som siger, at navne uden citater skal foldes til store bogstaver. Således skal foo svare til "FOO" ikke "foo" ifølge standarden. Hvis du ønsker at skrive bærbare applikationer, rådes du til altid at citere et bestemt navn eller aldrig citere det.)
Så hvis du gør dette:
create table pancakes (
Eggs integer not null
)
så kan du gøre en af disse:
update pancakes set eggs = 11;
update pancakes set Eggs = 11;
update pancakes set EGGS = 11;
og det vil fungere, fordi alle tre former er normaliseret til eggs
. Men hvis du gør dette:
create table pancakes (
"Eggs" integer not null
)
så kan du gøre dette:
update pancakes set "Eggs" = 11;
men ikke dette:
update pancakes set eggs = 11;
Den sædvanlige praksis med PostgreSQL er at bruge små bogstaver identifikatorer overalt, så du ikke behøver at bekymre dig om det. Jeg vil anbefale det samme navngivningsskema også i andre databaser, at skulle citere alt efterlader dig bare med et rod af dobbelte anførselstegn (standard), backticks (MySQL) og parenteser (SQL Server) i din SQL, og det vil ikke gøre dig nogle venner.