我尝试编写脚本以将某些文件保存到具有OID(字节[])的表中 我发现lo_import,但这并不是我想要的。我想设置base64而不是文件路径。有什么不同的方法吗?如果您听不懂->
我不想要的东西
INSERT INTO table VALUES (lo_import('path'))
我想要什么
INSERT INTO table VALUES (lo_import('base64 (maybe something else)'))
答案 0 :(得分:0)
您可以编写一个函数(这是仅服务器端的解决方案)
CREATE OR REPLACE FUNCTION lo_import_bytea(path text)
RETURNS bytea AS $$
DECLARE
loid oid;
result bytea;
BEGIN
loid := lo_import(path);
result := lo_get(loid);
PERFORM lo_unlink(loid);
RETURN result;
END;
$$ LANGUAGE plpgsql;
注意-只有超级用户可以使用lo_import
功能,因为该功能可以访问服务器端的文件系统。因此,此函数可能应该是SECURITY DEFINER
类型。在这种情况下,此功能可能是安全漏洞,可能某种形式的路径白名单可能是个好主意。
通常的方法是使用libpq(客户端库)函数lo_import
,该函数返回导入对象的oid。该oid可用作函数lo_get
的参数。此函数将LO对象转换为字节类型。转换后的值可以插入表中。之后,可以删除由oid描述的LO对象。