sql >> Databasteknik >  >> RDS >> PostgreSQL

Är namn ett speciellt nyckelord i PostgreSQL?

Detta är en känd förvirrande "funktion" med lite historia. Specifikt kan du referera till tupler från tabellen som helhet med tabellnamnet och sedan lägga till .name skulle anropa name funktion på dem (dvs. det skulle tolkas som select name(t) from t ).

Vid någon tidpunkt i PostgreSQL 9-utvecklingen, Istr, rensades detta upp lite. Du kan fortfarande select t from t uttryckligen för att få effekten rows-as-tuples, men du kan inte tillämpa en funktion på samma sätt. Så på PostgreSQL 8.4.9 , detta:

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

producerar det bisarra:

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

men på 9.1.1 producerar:

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

som du kan förvänta dig.

Så för att specifikt svara på din fråga:name är en standardtyp i PostgreSQL (används i katalogen för tabellnamn etc) och även några standardfunktioner för att konvertera saker till name typ. Det är faktiskt inte reserverat, bara de objekt som finns kallade det, plus någon historisk märklig syntax, gjorde saker och ting förvirrande; och detta har åtgärdats av utvecklarna i de senaste versionerna.



  1. Uppdatera poster som uppfyller ett villkor med ökande antal

  2. Kommandoraden för export av Mysql XML-tabell

  3. Postgres heltalsmatriser som parametrar?

  4. PHP mySQL - Infoga ny post i tabellen med automatisk ökning på primärnyckeln