PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:da OID a Bytea

Un altro modo che non richiede una funzione personalizzata è usare loread(lo_open(...)) combinazione, come:

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

C'è un problema con questo codice, il loread la funzione richiede come secondo parametro il numero massimo di byte da leggere (il 1000000 parametro che ho usato sopra), quindi dovresti usare un numero davvero grande qui se i tuoi dati sono grandi. Altrimenti, il contenuto verrà tagliato dopo questo numero di byte e non recupererai tutti i dati nel bytea campo.

Se vuoi convertire da OID a un campo di testo, dovresti anche usare una funzione di conversione, come in:

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

(262144 è un flag per la modalità aperta, 40000 in hexa, che significa "aperto in sola lettura")