Der er tre typer cast. Den registrerede rollebesætning for din kilde og måltype skal være "tildeling" (a
) eller "implicit" (i
) at arbejde i VALUES
udtryk for en INSERT
udmelding. Ser på systemkataloget pg_cast
, castet fra boolean
til integer
er kun defineret "eksplicit" (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
Relateret:
Du skal ændre castcontext
for at få det til at fungere - hvilket du kan gøre som superbruger. Der er ingen "ALTER CAST"-erklæring for denne eksotiske manøvre, du skal UPDATE
direkte. Ligesom:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Men , er der gode grunde til den foruddefinerede rollebesætningskontekst for hvert medvirkende. At manipulere med systemkataloger er ikke noget, du skal gøre let. I dette særlige tilfælde kan det være ubalance i beslutningstagningen, når Postgres skal vælge en matchende rollebesætning. Som for at vælge fra et sæt overbelastede funktioner ...
Lignende procedure for integer -> boolean
, int2 -> boolean
, boolean -> int2
osv.