2

psqlスクリプトの新機能。
変数をpsqlスクリプトに渡そうとしましたが、エラーが発生します。

psql -v dateav="2012-01-28" mcdb -p 5555 -U admin -q -t -A -c 'select count (client_name) from v_activities where scheduled_start_date like :'dateav';'

ERROR:  syntax error at or near ":"
LINE 1: ...) from v_activities where scheduled_start_date like :dateav;

何か案は?

4

1 に答える 1

2

次のように機能します。

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 コマンド

(...) command は、サーバーによって完全に解析可能なコマンド文字列でなければなりません (つまり、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$'

しかし、実際のアプリケーションではおそらく他の制限があります。

于 2012-11-26T20:08:55.073 に答える