En anden måde, som ikke kræver en brugerdefineret funktion, er at bruge loread(lo_open(...))
kombination, som:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
Der er et problem med denne kode, loread
Funktionen kræver som den anden parameter det maksimale antal bytes at læse (1000000
parameter, jeg brugte ovenfor), så du skal bruge et rigtig stort tal her, hvis dine data er store. Ellers vil indholdet blive trimmet efter så mange bytes, og du får ikke alle data tilbage i bytea
felt.
Hvis du vil konvertere fra OID til et tekstfelt, skal du også bruge en konverteringsfunktion, som i:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
(262144
er et flag for åben tilstand, 40000
i hexa, hvilket betyder "åben skrivebeskyttet")