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

Je jméno speciální klíčové slovo v PostgreSQL?

To je známá matoucí "funkce" s trochou historie. Konkrétně byste mohli odkazovat na n-tice z tabulky jako celku s názvem tabulky a poté připojením .name by vyvolalo name funkce na nich (tj. bude to interpretováno jako select name(t) from t ).

V určitém okamžiku vývoje PostgreSQL 9 se to Istr trochu vyčistilo. Stále můžete select t from t explicitně získat efekt řádků jako n-tic, ale nemůžete použít funkci stejným způsobem. Tedy na PostgreSQL 8.4.9 , toto:

create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;

vytváří bizarní:

  name   
---------
 (1,foo)
(1 row)

ale dne 9.1.1 produkuje:

ERROR:  column t.name does not exist
LINE 1: select t.name from t;
               ^

jak byste očekávali.

Abych konkrétně odpověděl na vaši otázku:name je standardní typ v PostgreSQL (používá se v katalogu pro názvy tabulek atd.) a také některé standardní funkce pro převod věcí na name typ. Ve skutečnosti to není vyhrazené, jen objekty, které tak existují, plus nějaká historická podivná syntaxe dělaly věci matoucími; a to bylo opraveno vývojáři v posledních verzích.



  1. Jaké znaky musí být escapovány, aby se zabránilo injekcím (My)SQL?

  2. Proč potřebuji OR NULL v MySQL při počítání řádků s podmínkou

  3. Migrace MySQL na PostgreSQL na AWS RDS, část 3

  4. TSQL - Je možné definovat pořadí řazení?