运行 PSQL 查询在 bash 中存储为字符串
Run PSQL queries stored as strings in bash
我正在尝试编写 运行s 在 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"
(这个 returns 我 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';")
我正在尝试编写 运行s 在 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"
(这个 returns 我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';")