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

问题描述 投票:0回答:1

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

arrays postgresql dblink
1个回答
0
投票

使用 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 $$;
© www.soinside.com 2019 - 2024. All rights reserved.