大きなオブジェクトのサイズによって異なります。ラージオブジェクトが約500MB未満の場合、LOBを使用する必要はなく(PostgreSQLではLOという用語を使用)、text
を使用できます。 またはvarchar
タイプ-作業はvarchar
と同様です 。このサイズの後は、LOAPIを使用する必要があります。
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)
したがって、LO APIを使用できますが、基本的なタイプを優先する必要があります。これらのタイプの制限は通常十分であり、基本的なタイプでの作業ははるかに快適ですが、フルテキストなどのいくつかの可能性があります。