キャストには3種類あります。ソースの登録済みキャストターゲットタイプは、「割り当て」(a
)である必要があります ) または"暗黙的"(i
) VALUES
で動作する INSERT
の式 声明。 システムカタログpg_cast
を見る
、boolean
からのキャスト integer
"explicit"(e
)のみが定義されています ) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
結果:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
関連:
castcontext
を変更する必要があります それを機能させるために-あなたはできる スーパーユーザーとして実行します。このエキゾチックマニューバには「ALTERCAST」ステートメントはありません。UPDATE
する必要があります 直接。いいね:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
ただし 、各キャストの事前定義されたキャストコンテキストには正当な理由があります。システムカタログの改ざんは、簡単に行うべきことではありません。この特定のケースでは、Postgresが一致するキャストを選択する必要があるときに意思決定のバランスが崩れる可能性があります。オーバーロードされた関数のセットから選択するのと同じように...
integer -> boolean
の同様の手順 、int2 -> boolean
、boolean -> int2
、など。