PostgreSQL预准备语句执行无返回数据,使用是否正确?
PostgreSQL预准备语句执行无结果的问题解决
你的预准备语句语法本身是正确的,问题出在DBeaver的交互操作上:
- 你创建的
PREPARE fetch_users AS SELECT * FROM "user" u WHERE u.email = $1 LIMIT 1;符合PostgreSQL预准备语句的规范,能在pg_prepared_statements中查到说明创建成功。 - 执行
EXECUTE fetch_users('testemail@test.com');时,DBeaver会弹出参数输入提示框,此时你直接点击OK的话,DBeaver会忽略你写在语句里的参数值,自动给$1传入NULL。而SQL中NULL和任何值的比较结果都是未知,不会匹配到任何数据,所以查不到结果。
正确的执行方式:
- 当DBeaver弹出参数输入框时,在对应参数位置填入
testemail@test.com,再点击OK执行,就能得到预期结果。 - 也可以直接用
EXECUTE fetch_users($1);的形式执行,然后在参数框输入目标邮箱,避免语句里写参数值被工具忽略的问题。
另外,你单独运行SELECT语句能得到结果,也说明查询逻辑本身没问题,只是执行预准备语句时的参数传递环节出错了。
内容的提问来源于stack exchange,提问作者hermit
相关产品推荐
相关产品推荐

