You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL的psql中将\conninfo输出捕获到变量中?

解决方案

你猜的没错,\conninfo的输出确实是写入到STDERR,而psql的\o命令仅捕获STDOUT内容,所以之前的方法无效。以下是两种可行的解决思路:

方法一:在psql脚本内捕获连接信息

利用psql的shell命令执行功能,启动一个临时psql进程执行\conninfo,并将STDERR重定向到STDOUT以捕获内容:

-- 捕获当前连接信息到变量(自动继承当前连接的环境参数)
\set conninfo `psql -c '\conninfo' 2>&1`

-- 如果连接需要指定主机/端口,可显式传递参数
-- \set conninfo `psql -h :HOST -p :PORT -d :DBNAME -U :USER -c '\conninfo' 2>&1`

-- 将连接信息作为注释写入目标SQL文件头部
\echo -- 连接信息: :conninfo > target.sql

-- 后续将临时表内容追加到目标文件
\copy (SELECT sql_content FROM temp_sql_table) TO target.sql WITH (FORMAT TEXT, APPEND TRUE);

方法二:外部重定向合并输出流

如果不需要在脚本内处理,可在调用psql时将STDERR合并到STDOUT,再筛选出\conninfo的内容:

  1. 在psql脚本中单独输出\conninfo:
\echo -- 连接信息开始
\conninfo
\echo -- 连接信息结束

-- 后续输出生成的SQL内容
SELECT sql_content FROM temp_sql_table;
  1. 执行脚本时通过shell重定向并筛选:
psql -f your_script.sql 2>&1 | grep -A100 "-- 连接信息开始" | grep -B100 "-- 连接信息结束" > target.sql

内容的提问来源于stack exchange,提问作者Peter Van Biesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:38:16