PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Seltsames Verhalten in Postgresql

Ihr update_tbl_point Die Funktion macht wahrscheinlich so etwas:

new.last_update = current_timestamp;

aber es sollte new."Last_Update" verwenden Korrigieren Sie also Ihre Triggerfunktion.

Spaltennamen werden in PostgreSQL auf Kleinbuchstaben normalisiert (wohlgemerkt das Gegenteil von dem, was der SQL-Standard sagt), aber Bezeichner, die in doppelten Anführungszeichen stehen, behalten ihre Groß-/Kleinschreibung bei:

Wenn Sie einen Bezeichner in Anführungszeichen setzen, wird auch zwischen Groß- und Kleinschreibung unterschieden, während Namen ohne Anführungszeichen immer in Kleinbuchstaben umgewandelt werden. Zum Beispiel werden die Bezeichner FOO, foo und „foo“ von PostgreSQL als gleich angesehen, aber „Foo“ und „FOO“ unterscheiden sich von diesen dreien und voneinander. (Das Falten von Namen ohne Anführungszeichen in Kleinbuchstaben in PostgreSQL ist nicht mit dem SQL-Standard kompatibel, der besagt, dass Namen ohne Anführungszeichen in Großbuchstaben gefaltet werden sollten. Daher sollte foo gemäß dem Standard "FOO" und nicht "foo" entsprechen. Wenn Wenn Sie portable Anwendungen schreiben möchten, sollten Sie einen bestimmten Namen immer oder niemals angeben.)

Also, wenn Sie dies tun:

create table pancakes (
    Eggs integer not null
)

dann können Sie Folgendes tun:

update pancakes set eggs = 11;
update pancakes set Eggs = 11;
update pancakes set EGGS = 11;

und es wird funktionieren, weil alle drei Formen auf eggs normalisiert sind . Wenn Sie dies jedoch tun:

create table pancakes (
    "Eggs" integer not null
)

dann können Sie dies tun:

update pancakes set "Eggs" = 11;

aber nicht das:

update pancakes set eggs = 11;

Die übliche Praxis bei PostgreSQL besteht darin, überall Kleinbuchstaben zu verwenden, damit Sie sich darüber keine Gedanken machen müssen. Ich würde das gleiche Namensschema auch in anderen Datenbanken empfehlen, da Sie alles in Anführungszeichen setzen müssen, bleibt nur ein Durcheinander von doppelten Anführungszeichen (Standard), Backticks (MySQL) und Klammern (SQL Server) in Ihrem SQL und das wird nicht machen Sie keine Freunde.