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

如何在Python中捕获PostgreSQL存储过程的RAISE INFO输出

捕获PostgreSQL存储过程的RAISE INFO输出(Python实现)

要在Python中捕获PostgreSQL存储过程里RAISE INFO的输出,最常用的方案是借助psycopg2驱动的notice回调机制,具体实现步骤如下:

实现步骤

  • 确保安装psycopg2或psycopg2-binary包:
    pip install psycopg2-binary
    
  • 定义自定义的notice处理函数,用来接收并记录RAISE INFO的输出
  • 建立数据库连接时注册该回调函数,之后调用存储过程时,回调会自动捕获输出

完整代码示例

import psycopg2
from psycopg2.extensions import register_type, UNICODE

def process_notice(conn, notice):
    # 处理捕获到的INFO消息,这里可以打印、写入日志或做其他逻辑
    info_msg = notice.message.strip()
    print(f"存储过程输出: {info_msg}")
    # 示例:写入日志文件
    # with open("proc_exec_log.txt", "a", encoding="utf-8") as f:
    #     f.write(f"{info_msg}\n")

# 建立数据库连接
db_conn = psycopg2.connect(
    dbname="你的数据库名",
    user="你的用户名",
    password="你的密码",
    host="你的主机地址",
    port="你的端口"
)

# 注册Unicode类型,避免编码异常
register_type(UNICODE, db_conn)

# 绑定notice回调函数
db_conn.add_notice_handler(process_notice)

# 执行存储过程
with db_conn.cursor() as cur:
    cur.execute("CALL testing_proc()")
db_conn.commit()

# 关闭连接
db_conn.close()

关键说明

  • process_notice函数会在PostgreSQL发送notice消息(包括RAISE INFO的内容)时被触发,notice.message就是输出的原始文本
  • 可以根据业务需求修改process_notice的逻辑,比如将输出写入日志系统、存储到监控表等
  • 如果使用其他PostgreSQL Python驱动(如asyncpg),核心思路一致:监听notice事件并处理输出

内容的提问来源于stack exchange,提问作者manoj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:38