Existem três tipos de elenco. O cast registrado para seu tipo de destino de origem deve ser "atribuição" (
a ) ou "implícito" (i ) para trabalhar em VALUES expressão de um INSERT declaração. Examinando o catálogo do sistema pg_cast
, a conversão de boolean para integer é definido apenas "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:
Você teria que alterar
castcontext para fazê-lo funcionar - o que você pode faça como superusuário. Não há instrução "ALTER CAST" para esta manobra exótica, você teria que UPDATE diretamente. Curti:UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
No entanto , há boas razões para o contexto de conversão predefinido de cada conversão. Adulterar os catálogos do sistema não é algo que você deve fazer de ânimo leve. Neste caso em particular, pode desequilibrar a tomada de decisão quando o Postgres tem que escolher um elenco correspondente. Como para escolher de um conjunto de funções sobrecarregadas ...
Procedimento semelhante para
integer -> boolean , int2 -> boolean , boolean -> int2 , etc