Как экспортировать растр из PostGIS за один раз? - PullRequest
0 голосов
/ 30 октября 2018

В упрощенном каноническом примере (который я часто вижу на форумах и в книгах) сценария экспорта растра 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 запускать этот скрипт за один проход, т. Е. Как передать OID, возвращаемый lo_create (0) на lo_export команда. Кажется, что lo_export - это команда на стороне клиента, и он не может переварить какие-либо результаты запроса ... пожалуйста, помогите ...

1 Ответ

0 голосов
/ 31 октября 2018

Наконец, есть команда 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...