Một cách khác không yêu cầu hàm tùy chỉnh là sử dụng loread(lo_open(...))
kết hợp, như:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
Có sự cố với mã này, loread
hàm yêu cầu là tham số thứ hai số byte tối đa để đọc (1000000
tham số tôi đã sử dụng ở trên), vì vậy bạn nên sử dụng một số thực sự lớn ở đây nếu dữ liệu của bạn lớn. Nếu không, nội dung sẽ bị cắt bớt sau nhiều byte này và bạn sẽ không lấy lại được tất cả dữ liệu vào bytea
trường.
Nếu bạn muốn chuyển đổi từ OID sang trường văn bản, bạn cũng nên sử dụng hàm chuyển đổi, như trong:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
(262144
là một lá cờ cho chế độ mở, 40000
trong hexa, có nghĩa là "chỉ đọc mở")