Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL将大型对象导出到客户端_Postgresql_Postgresql 9.1 - Fatal编程技术网

PostgreSQL将大型对象导出到客户端

PostgreSQL将大型对象导出到客户端,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我有一个PostgreSQL 9.1数据库,其中图片存储为大型对象。 有没有办法通过SQL查询将文件导出到客户机文件系统 select lo_export(data,'c:\img\test.jpg') from images where id=0; 我正在寻找一种类似于上面的方式,但以客户为目标。 提前谢谢 格奥尔格 根据,lo_导出是相对于执行调用的客户端的。因此,如果clientA连接到databaseB,当clientA执行SQL时,lo_export应该在clientA上创建您告诉它

我有一个PostgreSQL 9.1数据库,其中图片存储为大型对象。 有没有办法通过SQL查询将文件导出到客户机文件系统

select lo_export(data,'c:\img\test.jpg') from images where id=0;
我正在寻找一种类似于上面的方式,但以客户为目标。 提前谢谢

格奥尔格

根据,lo_导出是相对于执行调用的客户端的。因此,如果clientA连接到databaseB,当clientA执行SQL时,lo_export应该在clientA上创建您告诉它的文件


鉴于您已经说明了在MATLAB下使用JDBC(我不熟悉您在MATLAB下可以做什么,也不熟悉执行调用的接口),如果您是从JDBC连接手动调用它:

java.sql.Connection conn= ...
java.sql.Statement stmt= conn.createStmt();
java.sql.ResultSet rs= stmt.executeQuery("select data from images where id=0");
// Assume one result
rs.next();
// Gets the blob input stream
InputStream blobData= rs.getInputStream(1);

// At this point you will have to write it to a file. 
// See below

rs.close();
stmt.close();
conn.close();
为了简洁起见,我在这里使用了非常松散和快速的JDBC操作。应该有更多的错误检查以及try/catch/finally语句来包装和清理连接


.

这是不可能的,因为PostgreSQL server所能做的就是通过客户端建立的网络连接将数据发送回客户端。
特别是,它不能在客户机文件系统上创建文件,只有客户机代码才能做到这一点。

这个答案很晚了,但会很有帮助,所以我相信有人会这么做

要从服务器客户端系统获取图像,您可以使用

"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h 192.168.1.101 -p 5432 -d mDB -U mYadmin -c  "\lo_export 19135 'C://leeImage.jpeg' ";
在哪里

  • h 192.168.1.101:是服务器系统IP
  • -d mDB:数据库名称
  • -U mYadmin:用户名
  • \lou export:将在客户端系统位置创建映像的导出功能
  • C://leeImage.jpeg:图像OID中目标图像的位置和名称
  • 19135:这是表中图像的OID 文档在这里

    来源:


    谢谢我对这个很陌生,有点困惑。链接到的Lou导出是一个C函数,但我想使用SQL查询来实现同样的功能。这适用于服务器端LOU导入和LOU导出,但我不知道如何从服务器端完成这项工作。目前,我的解决方法是使用-c\lou export foo,'bar'作为附加参数调用psql。遗憾的是,我也不熟悉Stackoverflow,之前按return提交了回复,当时我只想换行您如何连接到该实例?使用psql?啊哈!好的,我明白你想做什么了。我正在通过MATLAB使用JDBC。使用这个
    \lo\u export lo\u oid文件名大对象导出命令是可能的;这使您可以将OID lo_OID的大对象导出到本地文件系统上的文件名。这与lou export()服务器函数的不同之处在于\copy和SQL copy命令的不同表示“通过SQL查询”,并且\lou导出不是SQL查询,也不能是SQL查询的一部分。它是psql客户端程序的内部命令。
    
    CREATE TABLE image (
        name            text,
        raster          oid
    );
    
    SELECT lo_creat(-1);       -- returns OID of new, empty large object
    
    SELECT lo_create(43213);   -- attempts to create large object with OID 43213
    
    SELECT lo_unlink(173454);  -- deletes large object with OID 173454
    
    INSERT INTO image (name, raster)
        VALUES ('beautiful image', lo_import('/etc/motd'));
    
    INSERT INTO image (name, raster)  -- same as above, but specify OID to use
        VALUES ('beautiful image', lo_import('/etc/motd', 68583));
    
    SELECT lo_export(image.raster, '/tmp/motd') FROM image
        WHERE name = 'beautiful image';