PostgreSQL:如何将dblink SELECT结果存储到ARRAY?

brvekthn  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(103)

假设我有一个带有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 docs没有显示任何相关示例。

aiazj4mn

aiazj4mn1#

使用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 $$;

字符串

相关问题