Det finns tre typer av gjutning. Den registrerade skådespelaren för din källa och måltyp måste vara "tilldelning" (a
) eller "implicit" (i
) för att arbeta i VALUES
uttryck för en INSERT
påstående. Tittar på systemkatalogen pg_cast
, skådespelaren från boolean
till integer
är bara definierad som "explicit" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Resultat:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Relaterat:
Du måste ändra castcontext
för att få det att fungera - vilket du kan gör som superanvändare. Det finns ingen "ALTER CAST"-sats för denna exotiska manöver, du måste UPDATE
direkt. Gilla:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Men , det finns goda skäl för det fördefinierade castkontexten för varje cast. Att manipulera med systemkataloger är inte något du bör göra lättvindigt. I det här speciella fallet kan det obalans i beslutsfattandet när Postgres måste välja en matchande roll. Som för att välja från en uppsättning överbelastade funktioner ...
Liknande procedur för integer -> boolean
, int2 -> boolean
, boolean -> int2
osv.