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

ID sloupce doktríny na PostgreSQL neexistuje

user je vyhrazené slovo . Je to alias pro current_user .

regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

Pokud chcete použít user jako název tabulky, protože se jedná o vyhrazené slovo, musíte uvést identifikátor , např.:

SELECT id FROM "user";

Váš ORM by měl uvádět všechny identifikátory nebo alespoň vyhrazená slova. Pokud tak neučiníte, jedná se o chybu ve vašem ORM. Chybu ORM můžete obejít použitím nerezervovaného slova jako názvu tabulky.

Myslím, že v psql je to trochu bradavice že automaticky uvádí identifikátory, které předáváte příkazům zpětného lomítka. Takže \d user bude fungovat, ale select * from user zvyklý. Měli byste napsat \d "user" . Stejný problém nastává s rozlišováním malých a velkých písmen, kde \d MyTable funguje, ale SELECT * FROM MyTable nebude fungovat, musíte napsat SELECT * FROM "MyTable" .

Bylo by hezké dát HINT zpráva o tom v chybě. Bohužel analyzátor a plánovač ve skutečnosti nemají dostatek informací v okamžiku, kdy se vygeneruje chyba „sloupec neexistuje“, aby věděl, že jste původně napsali klíčové slovo, v tomto okamžiku vidí pouze sken funkce.



  1. Magento:Automaticky vytvořit soubor CSV pro každou zadanou objednávku

  2. Co může způsobit občasné chyby ORA-12519 (TNS:nebyla nalezena žádná vhodná obsluha).

  3. OMEZENÍ ZAHRANIČNÍHO KLÍČE SQL:Konečný, snadný průvodce pro nováčky

  4. Skartování XML z prováděcích plánů