Другим способом, который не требует пользовательских функций, является использование комбинации loread(lo_open(...))
, например:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
Существует проблема с этим кодом, функция loread
требует в качестве второго параметра максимальное количество байтов для чтения (параметр 1000000
, который я использовал выше), поэтому вам следует использовать действительно большое число, если данные большие. В противном случае содержимое будет обрезано после такого количества байтов, и вы не вернете все данные обратно в поле bytea
.
Если вы хотите преобразовать OID в текстовое поле, вам также следует использовать функцию преобразования, например:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
(262144
- флаг для открытого режима, 40000
в гекса, что означает «открытый только для чтения»)