PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Nome é uma palavra-chave especial no PostgreSQL?


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.