在 postgresql 中输出多个 sql 查询的结果

Posted

技术标签:

【中文标题】在 postgresql 中输出多个 sql 查询的结果【英文标题】:Outputting results from multiple sql queries in postgresql 【发布时间】:2013-06-09 10:37:46 【问题描述】:

我在本地机器(运行 Windows 7)上安装了 postgresql-9.2,我也是管理员。我正在使用 pgAdmin III 的查询工具 来查询我的数据库。我的问题如下:

假设我有两张表Table_ATable_B,列数不同。另外,假设我有以下两个非常简单的查询:

select * from Table_A;
select * from Table_B;

我想同时运行这两个查询并查看它们的输出。我不介意在 GUI 或文件中看到输出。

我还尝试了复制命令并输出到 csv。但不是附加到文件,而是覆盖它。所以,我总是只得到来自查询 2 的结果。 GUI 也会发生同样的事情。

评论一个查询,运行另一个查询,输出到两个不同的文件,然后将这两个文件合并在一起真的很烦人。

【问题讨论】:

如果表结构相同,使用union 您可以使用union all,根据需要使用null 填充列。表定义是什么? @Denis -- 说这些是表结构: Table_A(col_A, col_B); Table_B(col_c, col_D, col_E, col_F) @PS1:表定义不仅仅是列名。 Consider this comment 这听起来更像是一个关于 SQL 客户端的问题,而不是关于 Postgres 的问题。也许尝试不同的 SQL 客户端? 【参考方案1】:

PostgreSQL 目前不支持此功能 - 来自文档 (http://www.postgresql.org/docs/9.4/interactive/libpq-exec.html):

命令字符串可以包含多个 SQL 命令(以分号分隔)。在单个 PQexec 调用中发送的多个查询在单个事务中处理,除非查询字符串中包含显式的 BEGIN/COMMIT 命令以将其划分为多个事务。但是请注意,返回的 PGresult 结构仅描述从字符串执行的最后一个命令的结果。如果其中一个命令失败,字符串的处理将随之停止,返回的 PGresult 将描述错误情况。

【讨论】:

【参考方案2】:

您的问题与客户无关。

假设所有列的类型都是text,试试这个查询:

SELECT col_a AS col_ac, col_b AS col_bd
      ,NULL::text AS col_e, NULL::text AS col_f
FROM   table_a

UNION  ALL
SELECT col_c, col_d, col_e, col_f
FROM   table_b;

列名和数据磁带由UNION SELECT 的第一个分支定义。其余的必须排队。

【讨论】:

【参考方案3】:

您可以使用 UNION ALL,但您需要确保每个子查询具有相同的列数。

SELECT 'a', 'b'
UNION ALL
SELECT 'c' ;

不会工作。

SELECT 'a', 'b'
UNION ALL
SELECT 'c', 'd'

会有用的

【讨论】:

以上是关于在 postgresql 中输出多个 sql 查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PostgreSQL 查询输出导出到 csv 文件

sql 将postgreSQL查询的输出重定向到文件

如何使用 RECORD 在 PostgreSQL 中返回多行?

Postgresql 是 1 个查询还是多个?

PostgreSQL学习系列—EXPLAIN ANALYZE查询计划解读

在 Vertx (Vert.x 3) 中异步运行多个 Sql 查询