如何使用su -c和bash脚本引用psql语句?

时间:2015-02-06 09:00:21

标签: bash postgresql psql

我在bash脚本中尝试以下语句:

su -c  "psql -d myDB-c 'SELECT count(*) AS number, date_trunc('day'::text, users.registerdate) AS registerdate FROM users;'" postgres

问题是'day'参数需要引用,但在引号内它不起作用。

1 个答案:

答案 0 :(得分:1)

您似乎试图将单引号括在单引号内,这当然是您无法做到的。 'this'and'that'解析为'this',然后是and,后跟'that',而不是引用的字符串this'and'that

通常的解决方案是用双引号括起单引号,反之亦然,如果在引用的字符串中替换双引号是可接受的"this'and'that"'this"and"that';但是在这里,你已经拥有了两者,所以你不能这样做(直截了当)。

假设psql可以从stdin读取命令,这里的简单解决方法是使用here document

su -c "psql -d myDB-c <<'____HERE' 
    SELECT count(*) AS number,
           date_trunc('day'::text, users.registerdate) AS registerdate
    FROM users;
____HERE" postgres