gpt4 book ai didi

postgresql - 使用 DO DECLARE 和 EXECUTE 的 Postgres DROP TABLE

转载 作者:行者123 更新时间:2023-11-29 14:13:10 28 4
gpt4 key购买 nike

我正在尝试使用 EXECUTE 删除从查询返回的表。这是一个例子:

CREATE TABLE test_a (id BIGINT);
CREATE TABLE test_b (id BIGINT);

DO
$f$
DECLARE command TEXT;
BEGIN
SELECT INTO command 'SELECT ARRAY_TO_STRING(ARRAY_AGG($$DROP TABLE $$ || table_name), $$;$$) FROM information_schema.tables WHERE table_name ILIKE $$test%$$';
EXECUTE command;
END;
$f$;

SELECT 语句返回“DROP TABLE test_a; DROP TABLE test_b”,我将其传递到声明的变量中并尝试使用 EXECUTE 运行,但没有效果。我做错了什么?

PostgreSQL 9.5.18,由 Visual C++ build 1800 编译,64 位

最佳答案

您将字符串 SELECT ARRAY_TO_STRING ... 存储在该变量中,而不是 SELECT 语句的结果。

您还可以将 ARRAY_TO_STRING(ARRAY_AGG(..)) 简化为 string_agg() ,强烈建议使用 format()生成动态 SQL,正确处理需要引用的标识符。

使用以下内容:

DO
$f$
DECLARE
command TEXT;
BEGIN

SELECT string_agg(format('drop table %I', table_name), ';')
INTO command
FROM information_schema.tables
WHERE table_name ILIKE 'test%';

execute command;
END;
$f$;

关于postgresql - 使用 DO DECLARE 和 EXECUTE 的 Postgres DROP TABLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58607736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com