如何一次性从PostGIS导出栅格?

时间:2018-10-29 21:03:02

标签: postgresql psql postgis-raster

在栅格输出脚本OID(由 lo_create(0)返回)的简化规范示例(我经常在论坛和书中看到)中,这是 9585208 )必须在倒数第二个脚本行之前知道( lo_export 9585208'C:/temp/raster.png'):

SELECT oid, lowrite(lo_open(oid, 131072), img) As num_bytes
FROM (
    VALUES (
        lo_create(0),
        (SELECT ST_AsPNG(rast)
        FROM bag_o_rasters
        LIMIT 1)
    )
) As v(oid, img);

lo_export 9585208 'C:/temp/raster.png'

SELECT lo_unlink(9585208);

我很难弄清楚如何使PSQL cli实用程序一次性运行此脚本,即,如何将 lo_create(0)返回的OID传达给 lo_export < / em>命令。看来lo_export是客户端命令,它无法消化任何查询结果...请帮助...

1 个答案:

答案 0 :(得分:2)

最后,有一个PSQL命令 \ gset 将值存储到脚本变量中,文档说:

  

\ gset 将当前查询缓冲区发送到服务器并存储查询的   输出到psql变量中。要执行的查询必须返回   恰好一行。该行的每一列都存储在单独的位置   变量,其名称与列相同。

以下是相应修改的脚本:

SELECT lo_create(0) as blob_oid

\gset

SELECT oid, lowrite(lo_open(oid, 131072), img) As num_bytes
FROM (
    VALUES (
        :blob_oid,
        (SELECT ST_AsPNG(rast)
        FROM bag_o_rasters
        LIMIT 1)
    )
) As v(oid,img);

\lo_export :blob_oid 'C:/temp/raster.png'

SELECT lo_unlink(:blob_oid);