我有一个 Postgresql 数据库,需要运行一系列 SELECT 语句来收集所有相关信息以进行调试。有时有 20 多个语句。所有选择都使用相同的“参数”(或变量),但具有不同的 WHERE 子句。当前使用的“参数”有 5 到 17 个。
有没有一种方法可以让我在开始时定义一次参数,然后使用定义的值运行所有 SELECT 语句(一个接一个)?
例如,假设只有一个参数(一个ID字段)和后面的2个SELECT,那么伪代码如下。每次运行前我都会手动更新顶部的 ID 号。
-- 手动设置并在 SELECT 中重复使用的参数
v_id 整数:= 4732;
从产品中选择 * 其中 id = v_id;
从投诉中选择 * 其中产品_id = v_id;
...
我发现运行多个 SELECT 语句的唯一方法是将它们放入一个文件中并将其作为脚本传递给 psql。这是我唯一的选择吗?
目前我正在执行全局搜索并在运行之前替换 .sql(脚本)文件,但也许有更好的方法。例如,我在 SQL 文件中输入以下内容:
从产品中选择 * 哪里 id = #ID;
从投诉中选择 * 其中产品 ID = #ID;
...
在运行之前,进行全局搜索并将#ID替换为4732, 并类似地替换所有其他变量。
我正在考虑编写一个 Python 脚本来为我做到这一点,但也许有更好的方法来解决这个问题。
我询问了 Bing Chat,它建议创建一个临时表来将值保存为全局变量,然后我会在每个 SELECT 中加入到该表。我对此进行了一些思考,但是当有很多潜在变量并且并非每次都使用所有变量时,编辑也很困难。
谢谢
使用
psql
您可以使用 \set
来实现这一点
\set v_id 4732
SELECT * FROM product WHERE id = :'v_id';
SELECT * FROM complaints WHERE product_id = :'v_id';