PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Existe alguma maneira de converter o tipo de dados postgresql 9.3 para que ele possa afetar apenas um lado


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