Ada tiga jenis pemeran. Pemeran terdaftar untuk sumber Anda, jenis target harus "tugas" (a
) atau "implisit" (i
) untuk bekerja di VALUES
ekspresi INSERT
penyataan. Melihat katalog sistem pg_cast
, pemeran dari boolean
ke integer
hanya didefinisikan "eksplisit" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Hasil:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Terkait:
Anda harus mengubah castcontext
untuk membuatnya bekerja - yang Anda bisa lakukan sebagai pengguna super. Tidak ada pernyataan "ALTER CAST" untuk manuver eksotis ini, Anda harus UPDATE
secara langsung. Seperti:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Namun , ada alasan bagus untuk konteks pemeran yang telah ditentukan sebelumnya untuk setiap pemeran. Merusak katalog sistem bukanlah sesuatu yang harus Anda lakukan dengan mudah. Dalam kasus khusus ini mungkin membuat pengambilan keputusan tidak seimbang ketika Postgres harus memilih pemain yang cocok. Seperti untuk memilih dari serangkaian fungsi yang kelebihan beban ...
Prosedur serupa untuk integer -> boolean
, int2 -> boolean
, boolean -> int2
, dll.