在pgadmin3中,我希望使用参数化查询(为了更快地调试,只需从我的php文件中复制并粘贴查询).但我还没有找到一个选项来添加$1$2...参数.可能吗?

这是我在循环中构建的查询,遵循从here开始进行空测试的建议:

SELECT EXISTS(SELECT 1
              FROM tax
              WHERE (addby=$1 or addby<>$1)
                    AND (adddate=$2 or adddate<>$2)
                    AND ($3 IS NULL AND nome IS NULL OR nome=$3)
                    AND ($4 IS NULL AND rank IS NULL OR rank=$4)
                    AND ($5 IS NULL AND pai IS NULL OR pai=$5)
                    AND ($6 IS NULL AND valido IS NULL OR valido=$6)
                    AND ($7 IS NULL AND sinonvalid IS NULL OR sinonvalid=$7)
                    AND ($8 IS NULL AND espec IS NULL OR espec=$8)
                    AND ($9 IS NULL AND public IS NULL OR public=$9)
       );

请注意,手动替换所有参数非常繁琐,容易出错,而且可能(我希望)没有必要.

提前谢谢.

推荐答案

我只知道两种方法.

首先是使用PREPARED STATEMENT(PostgreSQL手册之后的示例):

PREPARE usrrptplan (int) AS
    SELECT * FROM users u, logs l
    WHERE u.usrid=$1 AND u.usrid=l.usrid AND l.date = $2;

EXECUTE usrrptplan(1, current_date);

PREPARE创建一个准备好的语句.

准备好的语句可以接受参数:执行语句时被替换到语句中的值.创建准备好的语句时,使用$1、$2等按位置引用参数.

准备好的语句仅在当前数据库会话期间有效.会话结束时,已准备好的语句将被遗忘,因此在再次使用之前必须重新创建该语句.

第二是"找到并替换"$1$2..等等,通过适当的值.但你要避免这一次.

Postgresql相关问答推荐

mosquito-go-auth with postgres authorization error

Jsonb[]字段中的PostgreSQL否定&q;-0.0

Postgres:创建分区需要很长时间

PostgreSQL存储过程中不存在游标

PL/pgSQL中的IP递增函数

返回行值和行计数的总和

如何将特定值排序为最后,其余记录按 id DESC 排序?

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

如何在postgresql中按时间查询

Postgres 查询计划器不会使用更便宜的复合索引

有对(type_id,element_id),如(1,1),(1,2),..(5,3).如果我需要获取没有 element_id 1 的类型 ID,如何从结果中排除 type_id?

函数将多列作为单列而不是多列返回

Rails Migration 使用转换将字符串转换为整数

如果 PostgreSQL 数据库中存在,则删除表

Sidekiq - 无法在 5.000 秒内获得数据库连接

为 Django Postgres 连接强制 SSL

声明变量set = select

Postgres jsonbNOT contains运算符

如何从另一个脚本运行 postgres sql 脚本?

PostgreSQL:如果不存在则创建表 AS