PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL:de OID para Bytea


Outra maneira que não requer uma função personalizada é usar o loread(lo_open(...)) combinação, como:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL

Há um problema com este código, o loread A função requer como segundo parâmetro o número máximo de bytes a serem lidos (o 1000000 parâmetro que usei acima), então você deve usar um número muito grande aqui se seus dados forem grandes. Caso contrário, o conteúdo será cortado após esse número de bytes e você não receberá todos os dados de volta no bytea campo.

Se você deseja converter de OID para um campo de texto, também deve usar uma função de conversão, como em:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')

(262144 é um sinalizador para o modo aberto, 40000 em hexa, que significa "abrir somente leitura")