Nhận giá trị văn bản của OID CLOB trong Postgresql


8

Tôi có một bảng cơ sở dữ liệu trông giống như:

tạo câu trả lời
   id int không null,
   question_id int không null,
   trả lời văn bản null
)

Bảng này ban đầu được Hibernate xây dựng bằng cách sử dụng thuộc tính @Lob cho cột "answer". Tôi đã không nhận ra nó vào thời điểm đó, nhưng khi thiết lập theo cách đó, Hibernate lưu trữ một OID trong cột thay vì văn bản thực tế. Mọi thứ hoạt động tốt khi tôi sử dụng Hibernate để truy xuất các giá trị vì nó tự động chuyển đổi OID thành chuỗi CLOB, tuy nhiên nó đang trở thành một vấn đề về hiệu suất và tôi muốn thoát khỏi OID.

chọn * từ câu trả lời
ID QUESTION_ID TRẢ LỜI
===============================
1 123 55123
2 234 51614
3 345 56127
nên là
ID QUESTION_ID TRẢ LỜI
===============================
1 123 nam
2 234 203-555-1212
3 345 555 Chính St. New York, NY

Mong muốn của tôi là thêm một cột bổ sung vào bảng "ANSWER_VALUE TEXT" và làm một cái gì đó như bên dưới để lấy giá trị thực vào bảng, sau đó thay đổi Hibernate xung quanh để không sử dụng trình chỉ định @Lob

cập nhật câu trả lời được đặt ANSWER_VALUE = getValueFromOID (ANSWER)

Hàm "getValueFromOID" đó có tồn tại không? Nếu không, tôi có thể nhận được một số gợi ý về cách tạo một hoặc ít nhất là làm thế nào để lấy giá trị thực của một OID không?

Cảm ơn

Câu trả lời:


10

Cảm ơn đến a_horse_with_no_name . Giải pháp là:

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

Lưu ý - lo_getchức năng dường như có mặt trong Postgres 9.4 trở lên. Đối với các phiên bản trước, tôi không thấy cách làm này trực tiếp. Tôi hiện đang chạy 9.0, nhưng điều này chỉ tăng tốc các kế hoạch nâng cấp của tôi.



loread dường như không có sẵn cho tôi dưới dạng postgres hoặc chủ sở hữu cơ sở dữ liệu. "Không có chức năng nào khớp với tên và loại đối số đã cho"
John P

Có lẽ đó là vì tên hàm chính xác là lo_read.
Andriy M

Tài liệu cho lo_get có tại đây: postgresql.org/docs/9.6/static/lo-funcs.html
Freiheit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.