【问题标题】:Get response from EXECUTE in PLPGSQL从 PLPGSQL 中的 EXECUTE 获取响应
【发布时间】:2021-10-01 14:06:00
【问题描述】:

我设置了一个小查询,它使用 DO 块来动态编辑多个表。

DO
$$
DECLARE
    _table varchar[];
    loop_item text;
BEGIN
    SELECT array_agg(table_name::TEXT) FROM information_schema.tables 
    INTO _table
    WHERE table_schema = 'public';

FOREACH loop_item IN ARRAY "_table" 
LOOP
    IF loop_item != 'test' THEN     
        EXECUTE format('ALTER TABLE %s
        ADD COLUMN IF NOT EXISTS new_column varchar;', loop_item);
    END IF;
END LOOP;
END;
$$

如果未执行 EXECUTE 语句,则会打印一条通知。但我也想知道它何时成功执行。 如何捕获并引发 EXECUTE 语句的返回消息?

信息:我正在使用 Azure Database for Postgres,但无权访问配置文件。

【问题讨论】:

    标签: postgresql azure-sql-database azure-postgresql


    【解决方案1】:

    提出NOTICE

    IF loop_item != 'test' THEN     
        EXECUTE format('ALTER TABLE %I
            ADD COLUMN IF NOT EXISTS new_column varchar;', loop_item);
        RAISE NOTICE 'Table %s altered', loop_item;
    END IF;
    

    您的原始代码容易受到 SQL 注入的影响,您应该使用%I 格式。

    【讨论】:

    • 我的问题不准确。这适用于 ALTER TABLE,但我很感兴趣是否可以获取例如的输出。一个 SELECT 或 INSERT 然后提高它?这样我就可以方便地在多个表上运行一个查询。
    • EXECUTE 'SELECT ...' INTO record_var; RAISE '%', to_json(record_var);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2022-06-28
    • 2020-08-10
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多