PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Comportamento estranho no Postgresql


Seu update_tbl_point A função provavelmente está fazendo algo assim:
new.last_update = current_timestamp;

mas deve estar usando new."Last_Update" então corrija sua função de gatilho.

Os nomes das colunas são normalizados para minúsculas no PostgreSQL (o oposto do que o padrão SQL diz, lembre-se), mas os identificadores com aspas duplas mantêm suas maiúsculas:

A citação de um identificador também diferencia maiúsculas de minúsculas, enquanto os nomes sem aspas são sempre dobrados para letras minúsculas. Por exemplo, os identificadores FOO, foo e "foo" são considerados iguais pelo PostgreSQL, mas "Foo" e "FOO" são diferentes desses três e um do outro. (A dobragem de nomes sem aspas para letras minúsculas no PostgreSQL é incompatível com o padrão SQL, que diz que nomes sem aspas devem ser dobrados para letras maiúsculas. Assim, foo deve ser equivalente a "FOO" e não "foo" de acordo com o padrão. Se você deseja escrever aplicativos portáteis, é aconselhável sempre citar um nome específico ou nunca citá-lo.)

Então, se você fizer isso:
create table pancakes (
    Eggs integer not null
)

então você pode fazer qualquer um destes:
update pancakes set eggs = 11;
update pancakes set Eggs = 11;
update pancakes set EGGS = 11;

e funcionará porque todas as três formas são normalizadas para eggs . No entanto, se você fizer isso:
create table pancakes (
    "Eggs" integer not null
)

então você pode fazer isso:
update pancakes set "Eggs" = 11;

mas não isso:
update pancakes set eggs = 11;

A prática usual com o PostgreSQL é usar identificadores minúsculos em todos os lugares para que você não precise se preocupar com isso. Eu recomendaria o mesmo esquema de nomenclatura em outros bancos de dados também, ter que citar tudo apenas deixa você com uma bagunça de aspas duplas (padrão), backticks (MySQL) e colchetes (SQL Server) em seu SQL e isso não vai te fazer amigos.