PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :d'OID à Bytea

Une autre façon qui ne nécessite pas de fonction personnalisée consiste à utiliser le loread(lo_open(...)) combinaison, comme :

UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL

Il y a un problème avec ce code, le loread la fonction requiert comme deuxième paramètre le nombre maximum d'octets à lire (le 1000000 paramètre que j'ai utilisé ci-dessus), vous devez donc utiliser un très grand nombre ici si vos données sont volumineuses. Sinon, le contenu sera coupé après ce nombre d'octets et vous ne récupérerez pas toutes les données dans bytea champ.

Si vous souhaitez convertir un OID en un champ de texte, vous devez également utiliser une fonction de conversion, comme dans :

UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')

(262144 est un drapeau pour le mode ouvert, 40000 en hexa, ce qui signifie "ouvrir en lecture seule")