Detta är en känd förvirrande "funktion" med lite historia. Specifikt kan du referera till tupler från tabellen som helhet med tabellnamnet och sedan lägga till .name
skulle anropa name
funktion på dem (dvs. det skulle tolkas som select name(t) from t
).
Vid någon tidpunkt i PostgreSQL 9-utvecklingen, Istr, rensades detta upp lite. Du kan fortfarande select t from t
uttryckligen för att få effekten rows-as-tuples, men du kan inte tillämpa en funktion på samma sätt. Så på PostgreSQL 8.4.9 , detta:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
producerar det bisarra:
name
---------
(1,foo)
(1 row)
men på 9.1.1 producerar:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
som du kan förvänta dig.
Så för att specifikt svara på din fråga:name
är en standardtyp i PostgreSQL (används i katalogen för tabellnamn etc) och även några standardfunktioner för att konvertera saker till name
typ. Det är faktiskt inte reserverat, bara de objekt som finns kallade det, plus någon historisk märklig syntax, gjorde saker och ting förvirrande; och detta har åtgärdats av utvecklarna i de senaste versionerna.