sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Hay alguna forma de convertir el tipo de datos postgresql 9.3 para que pueda afectar solo a un lado?

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.