Друг начин, който не изисква персонализирана функция, е да използвате 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
в hexa, което означава "отворено само за четене")