Ruft den TEXT-Wert einer CLOB-OID in Postgresql ab


8

Ich habe eine Datenbanktabelle, die aussieht wie:

Tabellenantworten erstellen (
   id int nicht null,
   question_id int nicht null,
   Antworttext null
)

Diese Tabelle wurde ursprünglich von Hibernate mit dem Attribut @Lob für die Spalte "Antwort" erstellt. Ich habe es damals noch nicht bemerkt, aber bei dieser Einrichtung speichert Hibernate anstelle des eigentlichen Textes eine OID in der Spalte. Alles funktioniert einwandfrei, wenn ich den Ruhezustand zum Abrufen der Werte verwende, da die OID automatisch in die CLOB-Zeichenfolge konvertiert wird. Dies wird jedoch zu einem Leistungsproblem, und ich möchte die OID entfernen.

Wählen Sie * aus den Antworten
ID QUESTION_ID ANTWORT
===============================
1 123 55123
2 234 51614
3 345 56127
sollte sein
ID QUESTION_ID ANTWORT
===============================
1 123 Männlich
2 234 203-555-1212
3 345 555 Main St. New York, NY

Mein Wunsch ist es, der Tabelle "ANSWER_VALUE TEXT" eine zusätzliche Spalte hinzuzufügen und wie folgt vorzugehen, um den tatsächlichen Wert in die Tabelle aufzunehmen, und dann den Ruhezustand zu ändern, um den @ Lob-Bezeichner nicht zu verwenden

Antworten aktualisieren set ANSWER_VALUE = getValueFromOID (ANSWER)

Existiert diese Funktion "getValueFromOID"? Wenn nicht, könnte ich einige Hinweise dazu erhalten, wie man eine erstellt oder zumindest den tatsächlichen Wert einer OID abruft?

Vielen Dank

Antworten:


10

Danke geht an a_horse_with_no_name . Lösung ist:

update answers set answer_value = lo_get(cast(value as bigint))

Hinweis - Die lo_getFunktion scheint in Postgres 9.4 oder höher vorhanden zu sein. Für frühere Versionen sehe ich keine Möglichkeit, dies direkt zu tun. Ich verwende derzeit 9.0, aber dies hat meine Upgrade-Pläne nur beschleunigt.



loread scheint mir weder als Postgres noch als Datenbankbesitzer zur Verfügung zu stehen. "Keine Funktion entspricht dem angegebenen Namen und den angegebenen Argumenttypen"
John P

Vielleicht liegt es daran, dass der richtige Funktionsname lautet lo_read.
Andriy M

Die Dokumentation für lo_get ist hier: postgresql.org/docs/9.6/static/lo-funcs.html
Freiheit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.