postgresql创建辅助列表

时间:2017-07-31 08:39:15

标签: postgresql

我有一个表,我想从中删除一系列行,但列表是可变的(并且是硬编码的),所以我想定义一个辅助列表。 我知道我可以做到这一点

json_array_get()

但问题是我是否可以定义一个名为list的变量,就像我在Java或Python中所做的那样。

DELETE FROM table WHERE id IN (1, 4, 6, 7)

或类似的东西。

2 个答案:

答案 0 :(得分:1)

尝试使用VALUES,例如:

%

答案 1 :(得分:1)

是的,你可以。使用set语句设置值,使用current_setting()检索它:

set public.list to '{1,4,6,7}';

select *
from generate_series(1,10) as i
where i = any(current_setting('public.list')::int[]);

注意:

参数名称应包含点,例如只有list无效。

我已将column in (<list>)的同义词与数组一起使用,该数组允许将列表作为单个值。

set语句仅为会话设置变量。如果您想保持使用alter ... set ...代替

alter database my_db set public.list to '{1,4,6,7}';

用于数据库或

alter role my_role set public.list to '{1,4,6,7}';

对于特定用户(在这种情况下,您应该重新登录以获得效果)。

另一种方法是创建视图:

create view list(x) as values(1),(4),(6),(7);

并以这种方式使用它:

select *
from generate_series(1,10) as i
where i in (table list);