Questa è una nota "caratteristica" confusa con un po' di storia. In particolare, puoi fare riferimento alle tuple della tabella nel suo insieme con il nome della tabella e quindi aggiungere .name
invocherebbe il name
funzione su di essi (cioè sarebbe interpretato come select name(t) from t
).
Ad un certo punto nello sviluppo di PostgreSQL 9, Istr questo è stato un po' ripulito. Puoi ancora fare select t from t
esplicitamente per ottenere l'effetto righe come tuple, ma non è possibile applicare una funzione allo stesso modo. Quindi su PostgreSQL 8.4.9 , questo:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
produce il bizzarro:
name
---------
(1,foo)
(1 row)
ma su 9.1.1 produce:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
come ti aspetteresti.
Quindi, per rispondere in modo specifico alla tua domanda:name
è un tipo standard in PostgreSQL (usato nel catalogo per i nomi delle tabelle, ecc.) e anche alcune funzioni standard per convertire le cose nel name
genere. In realtà non è riservato, solo gli oggetti che esistono chiamati così, oltre a una strana sintassi storica, hanno reso le cose confuse; e questo è stato risolto dagli sviluppatori nelle versioni recenti.