Este é um "recurso" confuso conhecido com um pouco de história. Especificamente, você pode fazer referência a tuplas da tabela como um todo com o nome da tabela e, em seguida, anexar
.name
invocaria o name
função neles (ou seja, seria interpretado como select name(t) from t
). Em algum ponto do desenvolvimento do PostgreSQL 9, Istr isso foi um pouco limpo. Você ainda pode fazer
select t from t
explicitamente para obter o efeito de linhas como tuplas, mas você não pode aplicar uma função da mesma maneira. Assim, no PostgreSQL 8.4.9 , isto:create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
produz o bizarro:
name
---------
(1,foo)
(1 row)
mas em 9.1.1 produz:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
como você esperaria.
Então, para responder especificamente à sua pergunta:
name
é um tipo padrão no PostgreSQL (usado no catálogo para nomes de tabelas etc) e também algumas funções padrão para converter coisas para o name
modelo. Na verdade, não é reservado, apenas os objetos que existem chamados assim, além de alguma sintaxe estranha histórica, tornaram as coisas confusas; e isso foi corrigido pelos desenvolvedores em versões recentes.