PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist Name ein spezielles Schlüsselwort in PostgreSQL?

Dies ist ein bekanntes verwirrendes "Feature" mit ein wenig Geschichte. Insbesondere könnten Sie auf Tupel aus der Tabelle als Ganzes mit dem Tabellennamen verweisen und dann .name anhängen würde den name aufrufen Funktion auf ihnen (d. h. es würde als select name(t) from t interpretiert werden ).

Irgendwann in der Entwicklung von PostgreSQL 9 wurde dies etwas aufgeräumt. Sie können immer noch select t from t explizit, um den Zeilen-als-Tupel-Effekt zu erhalten, aber Sie können eine Funktion nicht auf die gleiche Weise anwenden. Also auf PostgreSQL 8.4.9 , das:

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

erzeugt das Bizarre:

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

aber auf 9.1.1 produziert:

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

wie Sie es erwarten würden.

Um Ihre Frage konkret zu beantworten:name ist ein Standardtyp in PostgreSQL (wird im Katalog für Tabellennamen usw. verwendet) und auch einige Standardfunktionen, um Dinge in den name umzuwandeln Typ. Es ist nicht wirklich reserviert, nur die Objekte, die so genannt werden, plus eine historisch seltsame Syntax, machten die Dinge verwirrend; und dies wurde von den Entwicklern in den letzten Versionen behoben.