Ci sono tre tipi di cast. Il cast registrato per la tua origine e un tipo di destinazione deve essere "assegnazione" (a
) o "implicito" (i
) per lavorare nei VALUES
espressione di un INSERT
dichiarazione. Osservando il catalogo di sistema pg_cast
, il cast di boolean
a integer
è definito solo "esplicito" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Risultato:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Correlati:
Dovresti cambiare castcontext
per farlo funzionare, cosa che puoi fare come superutente. Non esiste un'istruzione "ALTER CAST" per questa manovra esotica, dovresti UPDATE
direttamente. Come:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Tuttavia , ci sono buone ragioni per il contesto del cast predefinito di ogni cast. Manomettere i cataloghi di sistema non è qualcosa che dovresti fare alla leggera. In questo caso particolare può sbilanciare il processo decisionale quando Postgres deve scegliere un cast corrispondente. Come per scegliere da un insieme di funzioni sovraccaricate...
Procedura simile per integer -> boolean
, int2 -> boolean
, boolean -> int2
, ecc.