服务器系统中lo是什么意思,在服务器系统上使用\ COPY和BINARY for lo

编程入门 行业动态 更新时间:2024-10-27 14:30:43

<a href=https://www.elefans.com/category/jswz/34/1771423.html style=服务器系统中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

本文发布于:2024-03-08 00:32:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719365.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:服务器   系统   lo   COPY   BINARY

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!