如何向PgAdmin SQL查询添加参数值?

35

在pgadmin3中,我想使用参数化查询(为了更快地进行调试,只需从我的php文件中复制并粘贴查询)。但是我没有找到添加$1$2 ... 参数值的选项。这可能吗?

以下是我正在循环构建的查询,遵循此处有关NULL测试的建议:

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)
       );
注意,手动替换所有参数很繁琐、容易出错,而且可能(我希望是)不必要的。 提前致谢。
2个回答

38

我只知道两种方法。

第一种是使用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语句用于创建预处理语句。执行PREPARE语句时,指定的语句将被解析、分析和重写。随后发出EXECUTE命令时,将计划并执行所准备的语句。
预处理语句可以带参数:当执行语句时,这些参数的值将被替换到该语句中。在创建预处理语句时,请使用$1、$2等位置引用参数。
预处理语句仅在当前数据库会话期间有效。当会话结束时,预处理语句将被遗忘,因此必须重新创建后才能再次使用。
其次是通过适当的值“查找和替换” $1、$2 等等。但您希望避免这种方式。

6
SQL开发工具会弹出一个对话框提示,让你添加它们并保存上次的数值,非常方便。 - chrismarx
@chrismarx 不错的功能。 不幸的是,pgadmin 4没有引入此功能。 - faintsignal
5
我已经转用DBeaver(https://dbeaver.com/),它支持类似于`SELECT * FROM table WHERE col1 = :param1 AND col2 = :param2`这样的参数。 - chrismarx

12
在 DBeaver 中,您可以像在代码中一样在查询中使用参数,因此以下内容将起作用:

在DBeaver中,您可以像从代码中一样在查询中使用参数,因此这将有效:

select * from accounts where id = :accountId
当您运行查询DBeaver时,它会要求您提供:accountId的值并运行查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接