использование среды psql в объявлении функции - PullRequest
0 голосов
/ 15 апреля 2019

Мне не удается использовать параметр в объявлении функции.

SQL-скрипт, например:

CREATE OR REPLACE FUNCTION test_functon() RETURNS trigger AS
$BODY$
DECLARE
  test int:=:SRID;
BEGIN
  RETURN NEW;
END; 
$BODY$
LANGUAGE plpgsql;

в файле.

И запуск psql -v SRID=2056 -f my_file.sql

приводит к ошибке

ОШИБКА: синтаксическая ошибка на или около ":"

Это похоже на то, что SQL выполняется без правильной замены переменнойпо значению.

Какое решение для этого?

1 Ответ

1 голос
/ 26 апреля 2019

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