Dit is een bekende verwarrende "functie" met een beetje geschiedenis. U kunt met name verwijzen naar tupels uit de tabel als geheel met de tabelnaam en vervolgens .name
toevoegen zou de name
. aanroepen functie op hen (d.w.z. het zou worden geïnterpreteerd als select name(t) from t
).
Op een bepaald moment in de PostgreSQL 9-ontwikkeling, Istr, werd dit een beetje opgeschoond. U kunt nog steeds select t from t
expliciet om het rijen-als-tupels-effect te krijgen, maar u kunt een functie niet op dezelfde manier toepassen. Dus op PostgreSQL 8.4.9 , dit:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
produceert het bizarre:
name
---------
(1,foo)
(1 row)
maar op 9.1.1 produceert:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
zoals je zou verwachten.
Dus, om specifiek je vraag te beantwoorden:name
is een standaardtype in PostgreSQL (gebruikt in de catalogus voor tabelnamen enz.) en ook enkele standaardfuncties om dingen om te zetten naar de name
type. Het is niet echt gereserveerd, alleen de objecten die zo bestaan, plus een historische vreemde syntaxis, maakten de zaken verwarrend; en dit is opgelost door de ontwikkelaars in recente versies.