假设我有一个带有 UUID 类型列的表,我想将所有 uuid 提取到一个数组中,该数组将在循环中使用。
我有一个 PLSQL 块,如下所示(为简单起见,我只打印数组值):
DO $$
DECLARE
my_arr UUID ARRAY;
i UUID;
BEGIN
--my_arr := '{{40ffb910-aaaa-eeee-dddd-4d53dd14aaaa}, {40ffb910-aaaa-eeee-dddd-4d53dd14bbbb}}';
my_arr := (SELECT * FROM dblink ('my_conn', 'SELECT uuid_column FROM my_table') AS my_arr(name UUID ARRAY));
FOREACH i IN ARRAY my_arr
LOOP
RAISE NOTICE '%', i;
END LOOP;
END $$;
这会产生一个错误:
[22P02] ERROR: malformed array literal: "40ffb910-aaaa-eeee-dddd-4d53dd14aaaa"
Details: Array value must start with "{" or dimension information.
是否可以将 dblink SELECT 结果存储到数组中? Postgresql 文档没有显示任何相关示例。
使用 array_agg() 创建数组:
DO $$
DECLARE
my_arr UUID ARRAY;
i UUID;
BEGIN
--my_arr := '{{40ffb910-aaaa-eeee-dddd-4d53dd14aaaa}, {40ffb910-aaaa-eeee-dddd-4d53dd14bbbb}}';
my_arr := (SELECT * FROM dblink ('my_conn', 'SELECT array_agg(uuid_column) FROM my_table') AS my_arr(name UUID ARRAY));
FOREACH i IN ARRAY my_arr
LOOP
RAISE NOTICE '%', i;
END LOOP;
END $$;