PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:von OID zu Bytea

Eine andere Möglichkeit, die keine benutzerdefinierte Funktion erfordert, ist die Verwendung von loread(lo_open(...)) Kombination, wie:

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

Es gibt ein Problem mit diesem Code, dem loread Funktion benötigt als zweiten Parameter die maximale Anzahl zu lesender Bytes (die 1000000 Parameter, den ich oben verwendet habe), also sollten Sie hier eine wirklich große Zahl verwenden, wenn Ihre Daten groß sind. Andernfalls wird der Inhalt nach so vielen Bytes gekürzt, und Sie erhalten nicht alle Daten zurück in das bytea Feld.

Wenn Sie von OID in ein Textfeld konvertieren möchten, sollten Sie auch eine Konvertierungsfunktion verwenden, wie in:

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

(262144 ist ein Flag für den offenen Modus, 40000 in hexa, was "schreibgeschützt öffnen" bedeutet)