服务器系统中lo是什么意思,在服务器系统上使用\ COPY和BINARY for lo"/>
服务器系统中lo是什么意思,在服务器系统上使用\ COPY和BINARY for lo
基本上:
lo_export将指示在本地写一个文件的服务器(总是)
\copy将由PSQL变换到COPY ... TO STDOUT命令和写入到指定的文件的输出。 (那么,什么是写入该文件是select statment你之前在做的结果)
所以,你可以以这种方式不使用lo_export,它总是会写一个文件到服务器文件系统。
当然,您可以简单地通过让服务器写入共享驱动器,然后从该驱动器读取文件来解决此问题。丑陋,但有效的恕我直言。
对于最近的一些PSQL的版本(这是介绍的时候不知道)有一个\lo_export psql的命令,它需要一个OID和文件名,例如:
\lo_export 28914648 testfile
但是你需要获得该文件的OID以某种方式进入脚本...
你可以写一个PL/pgSQL函数这样转储文件作为BYTEA:
CREATE OR REPLACE FUNCTION getfiledata(lobjid oid) RETURNS bytea
STRICT STABLE LANGUAGE plpgsql AS $$
DECLARE
fd int4;
imgsize int4;
INV_READ int4 := 262144;
SEEK_SET int4 := 0;
SEEK_END int4 := 2;
BEGIN
SELECT lo_open(lobjid, INV_READ) INTO fd;
PERFORM lo_lseek(fd, 0, SEEK_END);
SELECT lo_tell(fd) INTO imgsize;
PERFORM lo_lseek(fd, 0, SEEK_SET);
RETURN loread(fd, imgsize);
END;
$$;
现在要求与大对象的OID这个函数将返回其内容为bytea的值。因此,您可以在COPY命令中调用此函数,它将返回文件数据...并通过使用\copy它将被发送到客户端。
现在通常建议这些天直接使用bytea列,而不是这个大的对象接口(稍后介绍bytea)。 PostgreSQL会自动将较大的值移动到非线性存储(“TOAST表”)中,并将其压缩(除非存储模式设置为“外部”来抑制这种情况,这对于JPEG图像来说可能是正确的做法等)
`"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h 192.168.1.101 -p 5432 -d myDB -U DB_admin -c "\lo_export 19135 'C://leeImage.jpeg' ";`
其中数字19135是我想要的客户端系统。该OID你可以从上,其图像物种的OID试试这个fishes表fishesimages OID 在上面的代码中使用OID,您可以使用OID获取图像。
更多推荐
服务器系统中lo是什么意思,在服务器系统上使用\ COPY和BINARY for lo
发布评论