web-dev-qa-db-ja.com

デフォルトの許容データ型変換行列

今日、値のuuidを定義したかった00000000-0000-0000-0000-000000000000。 SQL Serverの男性なので、私は 通常 ...

select cast(0x0 as uniqueidentifier);

...しかし、私は今postgresの世界にいるので、 賢明 ...

select cast('\x00'::bytea as uuid);
ERROR:  cannot cast type bytea to uuid
LINE 1: select cast('\x00'::bytea as uuid);
               ^

くそー!だから私は 型変換に関するpostgresのドキュメントthis one のようなドキュメントを参照して、デフォルトで 明示的なキャストを作成する

sql-server-implicit-explicit-conversion-matrix

そのようなチャートがドキュメントに存在する場合、それはよく隠されています。同様に、Googleもこの点であまり役に立ちません。

Postgresqlのデフォルトの許容される型キャストの適切なドキュメントリファレンスはありますか?


明確にするために、私は実際にはuuidを気にしません

5
Peter Vandivier

psqlクライアントを使用してリストを取得できます

\dCS

これにより、システムデータタイプ間で定義されたすべてのキャストが表示されます。

さらに、すべての型は、型の入力関数と出力関数を使用してtextとの間でキャストできます。

9
Laurenz Albe

ローレンツの投稿の補足として ...

docs から:

_\dC[+] [ pattern ]_

型キャストをリストします。パターンが指定されている場合、ソースまたはターゲットのタイプがパターンに一致するキャストのみがリストされます。コマンド名に+が追加されている場合、各オブジェクトは関連する説明とともにリストされます。

_\set ECHO_HIDDEN on_は_\dCS+_が実行中であることを明らかにします...

_SELECT pg_catalog.format_type(castsource, NULL) AS "Source type",
       pg_catalog.format_type(casttarget, NULL) AS "Target type",
       CASE WHEN c.castmethod = 'b' THEN '(binary coercible)'
            WHEN c.castmethod = 'i' THEN '(with inout)'
            ELSE p.proname
       END AS "Function",
       CASE WHEN c.castcontext = 'e' THEN 'no'
            WHEN c.castcontext = 'a' THEN 'in assignment'
            ELSE 'yes'
       END AS "Implicit?",
       d.description AS "Description"
FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p
     ON c.castfunc = p.oid
     LEFT JOIN pg_catalog.pg_type ts
     ON c.castsource = ts.oid
     LEFT JOIN pg_catalog.pg_namespace ns
     ON ns.oid = ts.typnamespace
     LEFT JOIN pg_catalog.pg_type tt
     ON c.casttarget = tt.oid
     LEFT JOIN pg_catalog.pg_namespace nt
     ON nt.oid = tt.typnamespace
     LEFT JOIN pg_catalog.pg_description d
     ON d.classoid = c.tableoid AND d.objoid = c.oid AND d.objsubid = 0
WHERE ( (true  AND pg_catalog.pg_type_is_visible(ts.oid)
) OR (true  AND pg_catalog.pg_type_is_visible(tt.oid)
) )
ORDER BY 1, 2;
_

...これにより、さらに興味深いドキュメントページがいくつか示されます。

  • _pg_cast_ -許可されるキャストをリストする基本システムテーブル
  • _pg_type_ -データ型の基本システムテーブルリファレンス
  • format_type() -_pg_type_のプリッティファイア関数。 データ型参照テーブル に見られるように、固有名をエイリアスにマッピングするのに役立ちます。
8
Peter Vandivier