【问题标题】:How to format quotes in a PostgreSQL query from a bash script如何从 bash 脚本格式化 PostgreSQL 查询中的引号
【发布时间】:2021-02-09 01:23:45
【问题描述】:

我正在尝试使用 bash 脚本查询 kubernetes Postgres pod,我希望允许用户输入变量,然后使用该变量进行查询。我的 bash 脚本如下:

#!/bin/bash

echo "give a last name"


read t

kubectl exec -it postgres-pod -- bash -c "psql -U postgres -c 'Select * from users WHERE last_name=\"$t\"'"

我已经尝试了单引号和双引号的所有组合,但我无法传递字符串类型的用户名。任何建议将不胜感激

【问题讨论】:

  • 有错误信息吗?如果是这样,请将其添加到您的问题中(无评论)。
  • 这可能会有所帮助:How to debug a bash script?
  • @JamesBrown 抱歉打错了我要么得到“列 last_name 不存在”要么“行尾有语法错误”
  • bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""
  • @JamesBrown 它有效!非常感谢

标签: sql bash postgresql kubernetes psql


【解决方案1】:

不知道为什么需要 bash,这应该可行吗?

kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"

【讨论】:

  • 感谢您的回答,但我已经尝试过了,但没有成功
【解决方案2】:

我使用上面@James Brown 的回答解决了这个问题:

bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""

【讨论】:

    【解决方案3】:

    简单但糟糕的解决方案是

    bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
    

    这可以获得正确的引用,但容易受到 SQL 注入的影响。如果变量t 包含带单引号的值怎么办?

    处理它并不是那么简单;我能想到的唯一方法是使用像这样的psql 变量:

    echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2021-05-20
      • 2013-08-15
      • 2012-11-15
      • 2023-04-02
      相关资源
      最近更新 更多