我需要从 Postgres SQL 中删除选定的表。最好使用like
或where
子句。
就像我有
TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N
我需要删除
TABLE_A to TABLE_X
答案 0 :(得分:2)
可以使用单个命令来完成,这是更快的操作-如果这是重复执行的任务。
如果不确定任何表的存在,请添加IF EXISTS
。这样,我们可以省去系统目录(information_schema.tables
或pg_catalog.pg_tables
)的额外行程。
并且您可能要添加CASCADE
:
DO
$do$
BEGIN
-- child safety device: quote RAISE instead of EXECUTE to prime the bomb
-- EXECUTE (
RAISE NOTICE '%', (
SELECT 'DROP TABLE IF EXISTS'
|| string_agg('table_' || chr(ascii('a') + g) , ', ')
|| ' CASCADE;'
FROM generate_series(0,13) g
);
END
$do$;
生成以下形式的命令:
DROP TABLE IF EXISTS table_a, table_b, ... , table_n CASCADE;
使用generate_series()
生成请求的表名。更多内容:
答案 1 :(得分:1)
DO
$$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT oid::REGCLASS table_name
FROM pg_class
WHERE relname <= 'table_x'
AND relkind = 'r'
LOOP
EXECUTE 'DROP TABLE' || r.table_name;
END LOOP;
END;
$$ LANGUAGE plpgsql;
答案 2 :(得分:0)
我从@Abdel那里得到了一些想法,并将其提供给了想要这个的用户。
DO
$$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public' AND table_name like 'YOUR_LIKE_QURY_GOES_HERE'
LOOP
EXECUTE 'DROP TABLE ' || r.table_name;
END LOOP;
END;
$$ LANGUAGE plpgsql;