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

PostgreSQL関数呼び出し

    これは、関数型の解決のルールによって決定されます 。マニュアルの詳細な説明。関連:

    • Postgresで関数のオーバーロードを無効にする方法はありますか

    明示的な型キャストのないNULLは、型「不明」として始まります:

    SELECT pg_typeof(NULL)
    
     pg_typeof
    -----------
     unknown
    

    実際、 Postgres 9.3と9.4で異なる結果を見つけるために、私は疑わしくなり、簡単なテストを実行しました。 varchar integerで選択されます (奇妙な あなたの発見と矛盾します):

    SQLフィドル。

    それに応じたルールはリストのポイント4eだと思います(以前のポイントはどれも一致を決定しません):

    候補者がそのカテゴリを受け入れる場合は、各位置で文字列カテゴリを選択します。 (不明なタイプのリテラルは文字列のように見えるため、この文字列へのバイアスは適切です。)

    入力タイプがtextの別の関数を追加した場合 オーバーロードされたミックスに、text varcharで選択されます 。

    個人的にはほとんどの場合 textを使用する varcharの代わりに 。バイナリ互換でありながら(ほとんど同じではありませんが)、text あらゆる点でPostgresの中心に近いです。

    私はそれをバイオリンに追加しました。また、Postgresが決定できず、タントラムを投げる別の例も追加しました。

    特定の関数を選択したい場合は、明示的な型キャストを追加します(これがここに行く方法です!):

    select test(null::int)     AS func_int
         , test(null::varchar) AS func_vc;
    



    1. rownum=3の給与からrownumを選択します。

    2. SQLiteテーブルの作成

    3. MySQLとMariaDBデータベースのバックアップリソース

    4. MountainLionのpggem'0.14.0'が失敗する