Dette er en kendt forvirrende "funktion" med en smule historie. Specifikt kan du henvise til tupler fra tabellen som helhed med tabelnavnet og derefter tilføje .name
ville påberåbe name
funktion på dem (dvs. det ville blive fortolket som select name(t) from t
).
På et tidspunkt i PostgreSQL 9-udviklingen blev Istr ryddet lidt op i dette. Du kan stadig select t from t
eksplicit for at få rows-as-tuples-effekten, men du kan ikke anvende en funktion på samme måde. Altså på PostgreSQL 8.4.9 , denne:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
producerer det bizarre:
name
---------
(1,foo)
(1 row)
men på 9.1.1 producerer:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
som du ville forvente.
Så for specifikt at besvare dit spørgsmål:name
er en standardtype i PostgreSQL (bruges i kataloget til tabelnavne osv.) og også nogle standardfunktioner til at konvertere ting til name
type. Det er faktisk ikke reserveret, bare de objekter, der eksisterer kaldet det, plus en eller anden historisk mærkelig syntaks, gjorde tingene forvirrende; og dette er blevet rettet af udviklerne i de seneste versioner.