postgresql - PostgreSQL 中的动态会话变量
问题描述
是否可以在 PostgreSQL 中使用“动态”会话变量运行查询?
我可以为变量定义一个静态值并在查询中使用它,但是如何根据对表的每条记录的迭代来设置“动态”变量?
具有定义变量的静态版本:
SET SESSION my.vars.ref = 'My value';
SELECT *
FROM sourceTable
WHERE myField LIKE current_setting('my.vars.ref')::text;
我不知道对我的 sourceTable 的每个单个值重复此操作。
我知道我可以执行一个基本的Select
,但在我的真实情况下,我运行一个递归查询,它返回我聚合数据。我使用这个结果在另一个表中插入值。
编辑 - 更复杂的查询:
SET SESSION my.vars.ref = 'My value';
SELECT CONCAT('Value: ', current_setting('my.vars.ref')::text)
FROM sourceTable
WHERE myField LIKE current_setting('my.vars.ref')::text;
解决方案
如果你想用 LIKE 比较多个值,你可以使用ANY
select *
from sourcetable
where myfield LIKE ANY (array['Value one%', 'My Value 2%', 'Three%']);
不需要循环或变量。
另一种选择是加入值列表:
select st.*, v.value
from sourcetable st
join (
values ('Value one%'),
('My Value 2%'),
('Three%')
) v(value) on st.myfield LIKE v.value;