我在将变量从Bash传递到psql命令时遇到麻烦。无法弄清楚需要在哪里放置引号或括号
我实质上是想将今天的日期插入PostGres表的日期列中
today=$(date +"%m-%d-%Y")
echo $today
#10-05-2015
psql -h hostname -U admin -d db-p 5439 -c \
"INSERT INTO public.log_table (day, rowcount) VALUES ("$today", $rowcount)";
Run Code Online (Sandbox Code Playgroud)
我尝试了$today不带引号和其他一些变体的电话,但无法让它传递我想要的东西,即10-05-2015。而是-2010插入值,该值必不可少的是10减5减2015 ...
您需要转义引号:
"INSERT INTO public.log_table (day, rowcount) VALUES (\"$today\", $rowcount)";
Run Code Online (Sandbox Code Playgroud)
在不转义它们的情况下,它们被 shell 解释为字符串的结尾。然后插入日期(因为 shell 将前一个字符串与这个不带引号的字符串连接起来),最后,在日期之后,shell 会看到 SQL 命令其余部分的另一个字符串,并与其他字符串连接。
所以 psql 收到的是
INSERT INTO public.log_table (day, rowcount) VALUES (10-05-2015, <rowcount_value>)
Run Code Online (Sandbox Code Playgroud)
并且它将它视为整数,因此 psql 解析为您要插入整数-2010。
正确引用它后,psql 收到:
INSERT INTO public.log_table (day, rowcount) VALUES ("10-05-2015", <rowcount_value>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |