sql >> Databáze >  >> RDS >> PostgreSQL

Podivné chování v Postgresql

Váš update_tbl_point funkce pravděpodobně dělá něco takového:

new.last_update = current_timestamp;

ale měl by používat new."Last_Update" tak opravte svou funkci spouštění.

Názvy sloupců jsou v PostgreSQL normalizovány na malá písmena (opak toho, co říká standard SQL mind you), ale identifikátory, které jsou v uvozovkách, si zachovávají velikost písmen:

Uvozováním identifikátoru se také rozlišují velká a malá písmena, zatímco jména neuvedená v uvozovkách jsou vždy složena na malá písmena. Například identifikátory FOO, foo a "foo" jsou PostgreSQL považovány za stejné, ale "Foo" a "FOO" se od těchto tří a navzájem liší. (Skládání jmen v uvozovkách na malá písmena v PostgreSQL je nekompatibilní se standardem SQL, který říká, že jména v uvozovkách by se měla skládat na velká písmena. Foo by tedy podle standardu mělo být ekvivalentní "FOO", nikoli "foo". chcete-li psát přenosné aplikace, doporučujeme vždy citovat konkrétní jméno nebo jej nikdy neuvádět.)

Takže, pokud uděláte toto:

create table pancakes (
    Eggs integer not null
)

pak můžete provést kterékoli z těchto:

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

a bude to fungovat, protože všechny tři formy jsou normalizovány na eggs . Pokud však uděláte toto:

create table pancakes (
    "Eggs" integer not null
)

pak můžete udělat toto:

update pancakes set "Eggs" = 11;

ale ne toto:

update pancakes set eggs = 11;

Obvyklou praxí u PostgreSQL je všude používat malá písmena, abyste se o to nemuseli starat. Doporučil bych stejné schéma pojmenování i v jiných databázích, když budete muset vše citovat, budete mít ve vašem SQL jen změť dvojitých uvozovek (standardní), zpětných zatržení (MySQL) a hranatých závorek (SQL Server), a to nebude udělat si přátele.




  1. Jaký je nejlepší způsob, jak se vypořádat s DBNull's

  2. Podmíněný počet SQL

  3. Porovnání Oracle MySQL, Percona Server a MariaDB

  4. Můžete rozdělit/rozložit pole v dotazu MySQL?