sql >> Database >  >> RDS >> PostgreSQL

Vreemd gedrag in Postgresql

Uw update_tbl_point functie doet waarschijnlijk iets als dit:

new.last_update = current_timestamp;

maar het zou new."Last_Update" moeten gebruiken dus repareer je triggerfunctie.

Kolomnamen worden genormaliseerd naar kleine letters in PostgreSQL (het tegenovergestelde van wat de SQL-standaard zegt, let wel) maar identifiers die dubbel worden aangehaald behouden hun hoofdlettergebruik:

Het citeren van een identifier maakt het ook hoofdlettergevoelig, terwijl namen zonder aanhalingstekens altijd worden omgevouwen tot kleine letters. De ID's FOO, foo en "foo" worden bijvoorbeeld door PostgreSQL als hetzelfde beschouwd, maar "Foo" en "FOO" verschillen van deze drie en van elkaar. (Het vouwen van niet-aangehaalde namen naar kleine letters in PostgreSQL is incompatibel met de SQL-standaard, die zegt dat niet-aangehaalde namen naar hoofdletters moeten worden gevouwen. Foo moet dus gelijk zijn aan "FOO" en niet "foo" volgens de standaard. Als als u draagbare toepassingen wilt schrijven, wordt u geadviseerd om altijd een bepaalde naam te citeren of deze nooit te citeren.)

Dus, als je dit doet:

create table pancakes (
    Eggs integer not null
)

dan kun je een van deze doen:

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

en het zal werken omdat alle drie de vormen zijn genormaliseerd naar eggs . Als u dit echter doet:

create table pancakes (
    "Eggs" integer not null
)

dan kun je dit doen:

update pancakes set "Eggs" = 11;

maar niet dit:

update pancakes set eggs = 11;

De gebruikelijke praktijk bij PostgreSQL is om overal kleine letters te gebruiken, zodat u zich daar geen zorgen over hoeft te maken. Ik zou hetzelfde naamgevingsschema ook in andere databases aanbevelen, als je alles moet citeren, krijg je alleen maar een puinhoop van dubbele aanhalingstekens (standaard), backticks (MySQL) en haakjes (SQL Server) in je SQL en dat zal niet maak je vrienden.




  1. Oracle Fusion Middleware / WebLogic Server 11g installeren

  2. Lijst met externe sleutels en de tabellen waarnaar ze verwijzen in Oracle DB

  3. MariaDB JSON_ARRAYAGG() uitgelegd

  4. Django-formulier om database (modellen) op te vragen