Itu tergantung pada ukuran objek besar Anda. Ketika objek besar Anda kurang dari 500MB, maka Anda tidak perlu menggunakan LOB (PostgreSQL menggunakan istilah LO), dan Anda dapat menggunakan text
atau varchar
ketik - pekerjaannya mirip dengan varchar
. Setelah ukuran ini, Anda harus menggunakan LO API.
CREATE OR REPLACE FUNCTION writeappend(oid, text)
RETURNS void AS $$
DECLARE
content bytea;
fd int;
BEGIN
content := convert_to($2, getdatabaseencoding());
fd := lo_open($1, 131072);
PERFORM lo_lseek(fd, 0, 2);
IF length(content) <> lowrite(fd, content) THEN
RAISE EXCEPTION 'not all content was written';
END IF;
PERFORM lo_close(fd);
END;
$$ LANGUAGE plpgsql;
postgres=> select lo_creat(-1);
┌──────────┐
│ lo_creat │
╞══════════╡
│ 20653 │
└──────────┘
(1 row)
postgres=> select writeappend(20653, e'Hello\r\n');
┌─────────────┐
│ writeappend │
╞═════════════╡
│ │
└─────────────┘
(1 row)
postgres=> select writeappend(20653, e'Hello\r\n');
...
postgres=> select convert_from(lo_get(20653),getdatabaseencoding());
┌──────────────┐
│ convert_from │
╞══════════════╡
│ Hello\r ↵│
│ Hello\r ↵│
│ │
└──────────────┘
(1 row)
Jadi Anda dapat menggunakan LO API, tetapi tipe dasar harus lebih disukai. Batasan untuk tipe ini biasanya cukup baik - dan bekerja dengan tipe dasar jauh lebih nyaman - dengan beberapa kemungkinan seperti fulltext.