sql >> Databasteknik >  >> RDS >> PostgreSQL

Konstigt beteende i Postgresql

Din update_tbl_point funktion gör förmodligen något så här:

new.last_update = current_timestamp;

men den borde använda new."Last_Update" så fixa din triggerfunktion.

Kolumnnamn är normaliserade till små bokstäver i PostgreSQL (motsatsen till vad SQL-standarden säger, märk väl), men identifierare som är dubbla citattecken behåller sin skiftläge:

Att citera en identifierare gör den också skiftlägeskänslig, medan namn utan citattecken alltid viks till gemener. Till exempel anses identifierarna FOO, foo och "foo" vara lika av PostgreSQL, men "Foo" och "FOO" skiljer sig från dessa tre och varandra. (Vikningen av namn utan citationstecken till gemener i PostgreSQL är inkompatibel med SQL-standarden, som säger att namn utan citattecken ska vikas till versaler. Således ska foo vara likvärdigt med "FOO" inte "foo" enligt standarden. Om om du vill skriva bärbara applikationer rekommenderas du att alltid citera ett visst namn eller aldrig citera det.)

Så, om du gör detta:

create table pancakes (
    Eggs integer not null
)

då kan du göra något av dessa:

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

och det kommer att fungera eftersom alla tre formerna är normaliserade till eggs . Men om du gör detta:

create table pancakes (
    "Eggs" integer not null
)

då kan du göra så här:

update pancakes set "Eggs" = 11;

men inte detta:

update pancakes set eggs = 11;

Den vanliga metoden med PostgreSQL är att använda gemener överallt så att du inte behöver oroa dig för det. Jag skulle rekommendera samma namnschema i andra databaser också, att behöva citera allt lämnar dig bara med en röra av dubbla citattecken (standard), backticks (MySQL) och parentes (SQL Server) i din SQL och det kommer inte gör dig några vänner.




  1. Varför är statisk ddl inte tillåtet i PL/SQL?

  2. använd mysql SUM() i en WHERE-sats

  3. Konvertera Unix-tidsstämpel till läsbart datum med hjälp av MySQL

  4. Logga frågetid i SQLite på Android