Jest to znana „funkcja” myląca z odrobiną historii. W szczególności możesz odwołać się do krotek z tabeli jako całości za pomocą nazwy tabeli, a następnie dołączyć .name
wywołałby name
funkcji na nich (tzn. będzie interpretowane jako select name(t) from t
).
W pewnym momencie rozwoju PostgreSQL 9 Istr zostało to nieco uporządkowane. Nadal możesz select t from t
jawnie, aby uzyskać efekt wierszy jako krotek, ale nie można zastosować funkcji w ten sam sposób. Więc na PostgreSQL 8.4.9 , to:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
produkuje dziwaczne:
name
---------
(1,foo)
(1 row)
ale na 9.1.1 produkuje:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
jak można się spodziewać.
Tak więc, aby konkretnie odpowiedzieć na twoje pytanie:name
jest standardowym typem w PostgreSQL (używanym w katalogu dla nazw tabel itp.), a także kilkoma standardowymi funkcjami do konwersji rzeczy na name
rodzaj. W rzeczywistości nie jest to zarezerwowane, tylko obiekty, które istnieją i jakaś historyczna dziwna składnia, sprawiają, że wszystko jest zagmatwane; i zostało to naprawione przez programistów w ostatnich wersjach.