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



我正在尝试编写一个在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';")

最新更新