sql >> データベース >  >> RDS >> PostgreSQL

nameはPostgreSQLの特別なキーワードですか?

    これは、少し歴史のある既知の紛らわしい「機能」です。具体的には、テーブル全体のタプルをテーブル名で参照し、.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に変換するためのいくつかの標準関数でもあります。 タイプ。それは実際には予約されていません。それと呼ばれる存在するオブジェクトと、いくつかの歴史的な奇妙な構文が、物事を混乱させました。これは最近のバージョンで開発者によって修正されました。



    1. SELECTで列の値を2つの列に分割しますか?

    2. Mysqli_error()が機能しない

    3. ストアドプロシージャによって返されたSTRUCTから配列を読み取ります

    4. Oracleの無効な識別子が文字列を理解していません