синтаксическая ошибка в или около ":" при запуске параметризованного запроса из оболочки - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь запустить параметризованный запрос из оболочки.

Но когда я запускаю:

p='some stuff'
psql -d "dbname" -v v1="$p" -c "SELECT * FROM table WHERE name=:'v1'"

Я получаю следующую ошибку:

ERROR:  syntax error at or near ":"

Между тем:

psql -d "dbname" -v v1="$p" -c "\echo :'v1'"

работает нормально. (возвращается, как и ожидалось: 'some stuff')

1 Ответ

1 голос
/ 30 октября 2019

Нельзя использовать переменную, определенную в -v в команде -c (см. Ниже). Попробуйте передать команду в стандартный ввод:

psql -d "dbname" -v v1="$p" <<< "SELECT * FROM table WHERE name=:'v1'"

Из документа :

-c команда

- команда команда

...

команда должна быть либо строкой команды, которая полностью разбирается сервером (т. Е. не содержит специфичных для psql) или одна команда с обратной косой чертой.

...

-v устанавливает внутреннюю переменную psql, равную psql-специфичные функции . Вот почему вы получили синтаксическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...