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)