Es hängt von der Größe Ihres großen Objekts ab. Wenn Ihre großen Objekte weniger als 500 MB groß sind, müssen Sie keine LOBs verwenden (PostgreSQL verwendet den Begriff LO), und Sie können einen text
verwenden oder varchar
type - die Arbeit ist ähnlich wie bei varchar
. Ab dieser Größe sollten Sie LO API verwenden.
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)
Sie können also die LO-API verwenden, aber grundlegende Typen sollten bevorzugt werden. Die Grenzen für diese Typen sind normalerweise gut genug - und die Arbeit mit einfachen Typen ist viel komfortabler - mit einigen Möglichkeiten wie Volltext.