PostgreSQL:如何在脚本中获取和设置枚举列表变量?
我在SQL脚本中使用GUC样式的变量,如下所示:PostgreSQL:如何在脚本中获取和设置枚举列表变量?,postgresql,Postgresql,我在SQL脚本中使用GUC样式的变量,如下所示: set mycustom.var = 5; select current_setting('mycustom.var'); 这对字符串和整数很有效。。。但是如何获取和设置整数的枚举列表呢 理想情况下,我希望使用以下代码使用随机唯一值填充枚举列表: SELECT num FROM GENERATE_SERIES (1, 10) AS s(num) ORDER BY RANDOM() LIMIT 6 要克服的问题是:需要文字输入
set mycustom.var = 5;
select current_setting('mycustom.var');
这对字符串和整数很有效。。。但是如何获取和设置整数的枚举列表呢
理想情况下,我希望使用以下代码使用随机唯一值填充枚举列表:
SELECT num
FROM GENERATE_SERIES (1, 10) AS s(num)
ORDER BY RANDOM()
LIMIT 6
要克服的问题是:需要文字输入。您不能直接将查询结果提供给它
解决方法之一:动态SQL,如:
DO
$$
BEGIN
EXECUTE format(
'SET mycustom.var = %L'
, ARRAY(
SELECT *
FROM generate_series(1, 10)
ORDER BY random()
LIMIT 6
)::text
);
END
$$;
或使用:
然后:
小提琴
这将返回一个整数数组:int[] 临时职能是另一种选择。可能具有内置的动态结果,而此解决方案仅存储结果,不可变: 使用 当然,设置类型为文本:
select current_setting('mycustom.list', true);
current_setting
-----------------
{2,6,1,3,10,8}
(1 row)
但是,您可以轻松地将其转换为一组行:
select *
from unnest(current_setting('mycustom.list', true)::int[])
unnest
--------
2
6
1
3
10
8
(6 rows)
嗯,我有两个错误:[代码:,SQL状态:42601]错误:开始位置或附近的语法错误:4[代码:,SQL状态:42601]错误:选择位置或附近的语法错误:7对我有效,我用Postgres 11进行了测试。查看添加的fiddle。它返回一个整数数组:int[]。你需要一份实际的清单吗?如果是,具体是什么形式和数据类型?如果您运行的是过期版本的Postgres,则需要声明该版本。
select set_config(
'mycustom.list',
(
select array_agg(num)::text
from (
select num
from generate_series (1, 10) as s(num)
order by random()
limit 6
) s
),
false
);
select current_setting('mycustom.list', true);
current_setting
-----------------
{2,6,1,3,10,8}
(1 row)
select *
from unnest(current_setting('mycustom.list', true)::int[])
unnest
--------
2
6
1
3
10
8
(6 rows)