Будет работать так:
echo "select count (client_name) from v_activities \
where scheduled_start_date like :'dateav'" | \
psql -v dateav="2012-01-28" mcdb -p 5555 -U admin -q -t -A
Объяснять:
Я цитирую руководство здесь:
-c команда
(...) команда должна быть либо командной строкой, полностью поддающейся анализу сервером (т. е. она не содержит не специфичных для psql функций)
Жирный акцент мой. Вы можете обойти это ограничение, передав команду конвейером вместо использования параметра -c
.
echo 'command' | psql
Этот другой вызов немного дороже, но таким образом переменные psql заменяются так, как вы предполагали.
Обратная косая черта в конце предназначена только для продолжения строки. Ни один символ не может следовать в одной строке. Единственная цель - более приятный формат.
В этом простом случае вы можете просто заменить переменную перед вызовом psql:
psql mcdb -p 5555 -U admin -q -t -A \
-c "select count (client_name) from v_activities \
where scheduled_start_date like '2012-01-28'"
Я использую двойные кавычки в командной строке, чтобы получить одинарные кавычки. Вы также можете комбинировать долларовую котировку и одинарные кавычки:
-c 'select ... like $x$2012-01-28$x$'
Но у вас, вероятно, есть другие ограничения в вашем реальном приложении.
person
Erwin Brandstetter
schedule
26.11.2012