bash - 运行在 bash 中存储为字符串的 PSQL 查询

标签 bash shell psql quotes

我正在尝试编写一个在 PostgreSQL 中运行查询的脚本。我正在努力解决一些看起来很简单的事情(但不起作用......)。

  • 我有一组查询存储为字符串数组,比如说
query1="SELECT COUNT(id) FROM nodes WHERE label='KeywordList';"
query2="SELECT COUNT(id) FROM nodes WHERE label='AuthorList';"
queries=($query1 $query2)
  • 然后,我想通过循环在 PSQL 中运行此查询:
for query in "${queries[@]}" 
do
    psql $db_name -c "$query"
done

这给了我以下错误:

ERROR:  syntax error at or near "COUNT"
LINE 1: COUNT(id)
        ^
ERROR:  syntax error at or near "FROM"
LINE 1: FROM
        ^
ERROR:  syntax error at or near "nodes"
LINE 1: nodes
        ^
ERROR:  syntax error at or near "WHERE"
LINE 1: WHERE
        ^
ERROR:  syntax error at or near "label"
LINE 1: label='KeywordList';
  • 但是当我将字符串本身提供给 PSQL 时,这会起作用: psql $db_name -c "$query1" (这返回我 10 )。

我认为这是一个引用问题,或者也许 Bash 试图理解字符串中的内容...在多次尝试双引号、单引号和反引号后,我无法自己解决这个问题。

非常感谢您的帮助,耐莉。

最佳答案

原样:

$ query1="SELECT COUNT(id) FROM nodes WHERE label='KeywordList';"
$ query2="SELECT COUNT(id) FROM nodes WHERE label='AuthorList';"
$ queries=($query1 $query2)
$ typeset -p queries
declare -a queries=([0]="SELECT" [1]="COUNT(id)" [2]="FROM" [3]="nodes" [4]="WHERE" [5]="label='KeywordList';" [6]="SELECT" [7]="COUNT(id)" [8]="FROM" [9]="nodes" [10]="WHERE" [11]="label='AuthorList';")

请注意,查询已被分解为单独的标记并存储为单独的数组条目。

与有效的 psql 示例一样,您需要在引用查询变量时引用它们...以在填充数组时包含,例如:

$ queries=("$query1" "$query2")
$ typeset -p queries
declare -a queries=([0]="SELECT COUNT(id) FROM nodes WHERE label='KeywordList';" [1]="SELECT COUNT(id) FROM nodes WHERE label='AuthorList';")

关于bash - 运行在 bash 中存储为字符串的 PSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65007788/

相关文章:

perl - 为什么 psql 在此用户定义的函数中向主机名添加 '+' 符号

postgresql - Postgres复制查询连接丢失错误

bash - 如何创建一个 bash 环境变量,在命令之前添加环境变量前缀?

bash - 如何在 bash 中使用变量指定命令行参数

linux - 使用正则表达式将列与 awk 匹配

linux - 为什么来自某些脚本(python、perl、libtool)的 shebang 和命令会被 bash 错误地解释?

c - 在 C 语言的基本 Shell 程序中,如何退出与父进程关联的所有进程?

regex - 使用 sed 将制表符替换为空格

bash - ec2 cloudformation实例的用户数据有问题

postgresql - SQL 窗口与 PSQL 的差异