在栅格输出脚本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是客户端命令,它无法消化任何查询结果...请帮助...
答案 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);