【问题标题】:psql query number of rows in multiple tables and save in variablepsql查询多个表中的行数并保存在变量中
【发布时间】:2020-11-09 06:48:18
【问题描述】:

我正在尝试在 shell 脚本中查询跨多个 PostgreSQL 表的记录总数。

shell脚本将由构建管道执行,管道需要知道总行数。

shell 脚本

docker run -it postgres psql "host=xxx.com port=5432 dbname=xxx user=xxx password=xxxw" -f row_count.sql

row_count.sql

select SUM(row_count)
from (
    SELECT count(*) as row_count
    FROM "table_a"
    union all
    SELECT count(*) as row_count
    FROM "table_b"
    union all
    SELECT count(*) as row_count
    FROM "table_c"
) as total

我已经测试了我的查询,它很好,但是从 psql 命令读取 sql 文件有困难,我不确定如何将记录数保存在要由管道读取的变量中。

【问题讨论】:

  • shrek_23 - 如果question 的答案之一解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。要将答案标记为已接受,您需要单击答案左侧的大复选标记 (✓)。您也可以查看this 了解更多信息。

标签: postgresql shell psql


【解决方案1】:

要在 shell 脚本中执行命令,请使用反引号。 https://unix.stackexchange.com/questions/27428/what-does-backquote-backtick-mean-in-commands 所以你的命令看起来像这样:

PGRESULT=`docker run -it postgres psql "host=xxx.com port=5432 dbname=xxx user=xxx password=xxxw" -f row_count.sql`

结果存储在 PGRESULT 中。阅读 psql 的手册页,也许向 psql 添加一些参数有助于进一步处理 PGRESULT 中的值。

-t --仅元组 关闭列名和结果行计数页脚等的打印。这相当于 \t 或 \pset tuples_only。

-c 命令 --command=命令 指定 psql 将执行给定的命令字符串 command。此选项可以以任何顺序重复和组合 -f 选项。当指定 -c 或 -f 时,psql 不会 从标准输入读取命令;而是在依次处理完所有 -c 和 -f 选项后终止。

-A --不对齐 切换到非对齐输出模式。 (默认输出模式,否则对齐。)这相当于 \pset 格式未对齐。

-F 分隔符 --field-separator=分隔符 使用分隔符作为未对齐输出的字段分隔符。这相当于 \pset fieldsep 或 \f。

【讨论】:

猜你喜欢
  • 2021-11-07
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多