如何通过ansible在postgres查询中转义单引号

时间:2016-09-04 06:06:25

标签: postgresql ansible

我能够通过ansible playbook执行postgres的简单选择/删除查询。但如果我的查询包含一些单引号,则会失败。如何逃避单一报价?

实施例

运行良好:

command: psql -U dbuser dbname -c 'SELECT count(*) from table;'

我想运行这个:

command: psql -U dbuser dbname -c 'SELECT count(*) from table where time <= '01-sep-2016';'

但这给了我错误。

2 个答案:

答案 0 :(得分:3)

不确定它在ansible playbook中会如何运作,但通常有3种方法可以解决这个问题:

  • 在查询周围使用双引号

    command: psql -U dbuser dbname -c "SELECT count(*) from table where time <= '01-sep-2016';"
    
  • 使用反斜杠:

    command: psql -U dbuser dbname -c 'SELECT count(*) from table where time <= \'01-sep-2016\';'
    
  • 连续两次使用引号:

    command: psql -U dbuser dbname -c 'SELECT count(*) from table where time <= ''01-sep-2016'';'
    

答案 1 :(得分:0)

你可以在shell中使用双引号,在SQL中使用单引号:

$ psql -U dbuser dbname -c "SELECT count(*) from table where time <= '01-sep-2016';"
# Here --------------------^-------------------------------------------------------^