Hay tres tipos de elenco. El elenco registrado para su fuente y tipo de destino debe ser "asignación" (a
) o "implícito" (i
) para trabajar en los VALUES
expresión de un INSERT
declaración. Mirando el catálogo del sistema pg_cast
, el elenco de boolean
a integer
solo se define "explícito" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Resultado:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Relacionado:
Tendrías que cambiar castcontext
para que funcione, lo cual puedes hacer como superusuario. No hay declaración "ALTER CAST" para esta maniobra exótica, tendrías que UPDATE
directamente. Me gusta:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Sin embargo , hay buenas razones para el contexto de reparto predefinido de cada reparto. Manipular los catálogos del sistema no es algo que deba hacer a la ligera. En este caso particular, puede desequilibrar la toma de decisiones cuando Postgres tiene que elegir un elenco coincidente. Como para elegir entre un conjunto de funciones sobrecargadas...
Procedimiento similar para integer -> boolean
, int2 -> boolean
, boolean -> int2
, etc.