Innym sposobem, który nie wymaga funkcji niestandardowej, jest użycie loread(lo_open(...))
kombinacja, jak:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
Wystąpił problem z tym kodem, loread
funkcja wymaga jako drugiego parametru maksymalnej liczby bajtów do odczytania (1000000
parametr, którego użyłem powyżej), więc powinieneś użyć naprawdę dużej liczby tutaj, jeśli twoje dane są duże. W przeciwnym razie zawartość zostanie przycięta po tylu bajtach i nie odzyskasz wszystkich danych z powrotem do bytea
pole.
Jeśli chcesz przekonwertować z OID na pole tekstowe, powinieneś również użyć funkcji konwersji, jak w:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
(262144
jest flagą trybu otwartego, 40000
w szesnastce, co oznacza „otwarty tylko do odczytu”)