PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il nome è una parola chiave speciale in PostgreSQL?

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.