これは、少し歴史のある既知の紛らわしい「機能」です。具体的には、テーブル全体のタプルをテーブル名で参照し、.name
を追加することができます。 name
を呼び出します それらの関数(つまり、select name(t) from t
として解釈されます 。
PostgreSQL 9開発のある時点で、Istrは少しクリーンアップされました。 select t from t
を引き続き実行できます タプルとしての行の効果を明示的に取得しますが、同じ方法で関数を適用することはできません。したがって、PostgreSQLでは 8.4.9 、これ:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
奇妙なものを生み出します:
name
---------
(1,foo)
(1 row)
しかし9.1.1 生成:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
ご想像のとおり。
それで、あなたの質問に具体的に答えるために:name
はPostgreSQLの標準タイプ(テーブル名などのカタログで使用)であり、name
に変換するためのいくつかの標準関数でもあります。 タイプ。それは実際には予約されていません。それと呼ばれる存在するオブジェクトと、いくつかの歴史的な奇妙な構文が、物事を混乱させました。これは最近のバージョンで開発者によって修正されました。