Nó phụ thuộc vào kích thước của vật thể lớn của bạn. Khi các đối tượng lớn của bạn nhỏ hơn khoảng 500MB, thì bạn không cần sử dụng LOB (PostgreSQL sử dụng thuật ngữ LO) và bạn có thể sử dụng text
hoặc varchar
type - công việc tương tự như với varchar
. Sau kích thước này, bạn nên sử dụng 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)
Vì vậy, bạn có thể sử dụng LO API, nhưng các loại cơ bản nên được ưu tiên. Giới hạn cho các loại này thường là đủ tốt - và làm việc với các loại cơ bản thoải mái hơn nhiều - với một số khả năng như fulltext.