从 PLPGSQL 中的 EXECUTE 获取响应
Get response from EXECUTE in PLPGSQL
我设置了一个使用 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语句没有执行,会打印一条通知。但是我也想知道它是什么时候执行成功的。
我怎样才能捕获和 RAISE EXECUTE 语句的 return 消息?
信息:我正在使用 Azure Database for Postgres,无法访问配置文件。
举一个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
格式。
我设置了一个使用 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语句没有执行,会打印一条通知。但是我也想知道它是什么时候执行成功的。 我怎样才能捕获和 RAISE EXECUTE 语句的 return 消息?
信息:我正在使用 Azure Database for Postgres,无法访问配置文件。
举一个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
格式。