bash - 在 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"
这会返回 me10
)。
我认为这是一个引用问题,或者 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';")
推荐阅读
- postgresql - 如何使用 st_contains() 根据其他两个表列的条件更新表列
- teradata - 如何用 Teradata 中同一列中的最后一个非空值填充 NULL 列字段?
- git - 如何对一个目录中的多个依赖项目进行版本控制(例如 web2py、django)
- python - 关闭 matplotlib 图而不关闭 tkinter
- linux - TCP 的套接字与 Linux 的 TCP 套接字
- r - 如何将 abline 保持在 corrplot 的边界内?
- java - MouseEvent.Moved,按下鼠标按钮时检测停止工作
- c++ - 成员引用基类型 'std::vector
*[10]' 不是结构或联合 - spring-boot - 使用springboot连接拒绝redis主从
- sql - 如何引用 BigQuery SQL 中先前行的列值,以便执行操作或计算?