PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Strano comportamento in Postgresql

Il tuo update_tbl_point funzione probabilmente sta facendo qualcosa del genere:

new.last_update = current_timestamp;

ma dovrebbe usare new."Last_Update" quindi correggi la tua funzione di attivazione.

I nomi delle colonne sono normalizzati in minuscolo in PostgreSQL (l'opposto di ciò che dice lo standard SQL intendiamoci) ma gli identificatori che sono tra virgolette mantengono la loro maiuscola:

Citare un identificatore rende anche la distinzione tra maiuscole e minuscole, mentre i nomi senza virgolette vengono sempre piegati in minuscolo. Ad esempio, gli identificatori FOO, foo e "foo" sono considerati gli stessi da PostgreSQL, ma "Foo" e "FOO" sono diversi da questi tre e l'uno dall'altro. (La piegatura dei nomi senza virgolette in minuscolo in PostgreSQL è incompatibile con lo standard SQL, che dice che i nomi senza virgolette dovrebbero essere piegati in maiuscolo. Quindi, foo dovrebbe essere equivalente a "FOO" non "foo" secondo lo standard. Se se vuoi scrivere applicazioni portatili ti consigliamo di citare sempre un nome particolare o di non citarlo mai.)

Quindi, se lo fai:

create table pancakes (
    Eggs integer not null
)

quindi puoi fare uno di questi:

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

e funzionerà perché tutti e tre i moduli sono normalizzati in eggs . Tuttavia, se lo fai:

create table pancakes (
    "Eggs" integer not null
)

allora puoi farlo:

update pancakes set "Eggs" = 11;

ma non questo:

update pancakes set eggs = 11;

La pratica abituale con PostgreSQL è usare identificatori minuscoli ovunque in modo da non doversi preoccupare. Consiglierei lo stesso schema di denominazione anche in altri database, dover citare tutto ti lascia solo con un pasticcio di virgolette doppie (standard), backtick (MySQL) e parentesi (SQL Server) nel tuo SQL e questo non lo farà farti degli amici.