sql >> Base de Datos >  >> RDS >> PostgreSQL

¿El nombre es una palabra clave especial en PostgreSQL?

Esta es una "característica" confusa conocida con un poco de historia. Específicamente, podría hacer referencia a las tuplas de la tabla como un todo con el nombre de la tabla y luego agregar .name invocaría el name función en ellos (es decir, se interpretaría como select name(t) from t ).

En algún momento del desarrollo de PostgreSQL 9, Istr esto se limpió un poco. Todavía puedes hacer select t from t explícitamente para obtener el efecto de filas como tuplas, pero no puede aplicar una función de la misma manera. Entonces en PostgreSQL 8.4.9 , esto:

create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;

produce lo extraño:

  name   
---------
 (1,foo)
(1 row)

pero en 9.1.1 produce:

ERROR:  column t.name does not exist
LINE 1: select t.name from t;
               ^

como era de esperar.

Entonces, para responder específicamente a su pregunta:name es un tipo estándar en PostgreSQL (usado en el catálogo para nombres de tablas, etc.) y también algunas funciones estándar para convertir cosas al name escribe. En realidad, no está reservado, solo los objetos que existen llamados así, además de una extraña sintaxis histórica, hicieron que las cosas fueran confusas; y esto ha sido solucionado por los desarrolladores en versiones recientes.