成功执行UPDATE脚本后Dbeaver统计显示更新行数为0但数据已更新的原因
问题原因及解决方案
核心原因
你的UPDATE语句被包裹在PostgreSQL的DO $$ ... $$匿名代码块(PL/pgSQL块)中执行,而Dbeaver的统计标签页只会捕获直接执行的DML语句(比如单独运行UPDATE)返回的受影响行数,不会解析匿名代码块内部的语句执行统计。
匿名代码块本身执行后只会返回"DO"状态,不会向外暴露内部UPDATE的行数信息,所以Dbeaver统计页显示更新行数为0,但实际上UPDATE已经生效。
验证与解决方法
验证更新行数:可以在DO块内部添加变量捕获更新行数,比如:
do $$ declare updated_rows integer; err_context text := 'Error during script execution'; begin UPDATE table1 p SET name= pt.name FROM table2 pt WHERE p.id = pt.tableid; -- 获取更新行数并打印 GET DIAGNOSTICS updated_rows = ROW_COUNT; raise notice '脚本执行成功,更新行数: %', updated_rows; exception when others then RAISE INFO '错误名称:%',SQLERRM; RAISE INFO '错误状态:%', SQLSTATE; RAISE INFO '错误上下文:%', err_context; end $$;执行后在Dbeaver的"输出"标签页可以看到
notice打印的更新行数。让统计页显示行数:如果需要Dbeaver统计页直接显示更新行数,直接执行不带DO块的UPDATE语句即可:
UPDATE table1 p SET name= pt.name FROM table2 pt WHERE p.id = pt.tableid;执行后统计标签页会正常显示受影响的行数。
内容的提问来源于stack exchange,提问作者Thejus32
相关产品推荐
相关产品推荐

