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

PostgreSQL:de OID a Bytea

Otra forma que no requiere una función personalizada es usar loread(lo_open(...)) combinación, como:

UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL

Hay un problema con este código, el loread requiere como segundo parámetro el número máximo de bytes a leer (el 1000000 parámetro que usé anteriormente), por lo que debe usar un número realmente grande aquí si sus datos son grandes. De lo contrario, el contenido se recortará después de esta cantidad de bytes y no obtendrá todos los datos nuevamente en el bytea campo.

Si desea convertir de OID a un campo de texto, también debe usar una función de conversión, como en:

UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')

(262144 es una bandera para el modo abierto, 40000 en hexa, lo que significa "abierto de solo lectura")