ByteA 到 BLOB 的转换通常会调用lo_open()
,
CREATE OR REPLACE FUNCTION make_lo(bytea)
RETURNS oid AS $$
DECLARE
loid oid;
fd integer;
bytes integer;
BEGIN
loid := lo_creat(-1);
fd := lo_open(loid, 131072); -- <<< --==HERE==--
bytes := lowrite(fd, $1);
IF (bytes != LENGTH($1)) THEN
RAISE EXCEPTION 'Not all data copied to blob';
END IF;
PERFORM lo_close(fd);
RETURN loid;
END;
$$ LANGUAGE plpgsql STRICT;
在上面是什么
fd := lo_open(loid, 131072);
你可以看到其他人在这里问同样的问题,
这个数字
131072
是一些我找不到是什么意思的标志,999999999 是最大读取大小,但我还是可以读取这个值。
此变量称为“模式参数”,它是
INV_READ
(x'20000'
)的 int 表示你可以看到这样的整数表示,
就个人而言,我宁愿使用
x'20000'
我发现更明确的。您可以INV_READ
在 中的评论中看到提到largeobject.source
,并且可以在 的代码中看到它的定义libpq-fs.h
。如果您曾经看到
262144
那是INV_WRITE
(0x40000
) 的数字化表示。