Dalším způsobem, který nevyžaduje vlastní funkci, je použití loread(lo_open(...))
kombinace, jako:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
S tímto kódem je problém, loread
funkce vyžaduje jako druhý parametr maximální počet bajtů ke čtení (1000000
parametr, který jsem použil výše), takže pokud jsou vaše data velká, měli byste zde použít opravdu velké číslo. V opačném případě bude obsah oříznut po tomto počtu bajtů a všechna data nedostanete zpět do bytea
pole.
Pokud chcete převést z OID na textové pole, měli byste také použít funkci převodu, jako v:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
(262144
je příznak pro otevřený režim, 40000
v hexa, což znamená "otevřeno pouze pro čtení")