Кажется, что psql не интерполирует переменные в теле функций.
Следующий SQL-запрос проверяет это.
SELECT :SRID;
CREATE OR REPLACE FUNCTION test_functon() RETURNS :TYPE AS
$BODY$
BEGIN
RETURN :SRID;
END;
$BODY$
LANGUAGE plpgsql;
Запуск этого файла приводит к следующему:
$ psql -v SRID=2056 -v TYPE=int -f query.sql
Expanded display is used automatically.
Null display is "¤".
?column?
----------
2056
(1 row)
psql:query.sql:9: ERROR: syntax error at or near ":"
LINE 4: RETURN :SRID;
^
Обратите внимание, что тип возвращаемого значения, определенный переменной TYPE
, по-прежнему интерполируется, но все внутри тела находится вне пределов.
Вам придется прибегнуть к другому механизму, чтобы получить свою переменную втам.Вы можете использовать тот факт, что PSQL принимает запрос через STDIN:
$ sed 's/:SRID/2056/' query.sql | psql