【发布时间】:2018-11-29 02:35:29
【问题描述】:
我需要从 Postgres SQL 中删除选定的表。最好使用like 或where 子句。
像我一样
TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N
我要删除
TABLE_A to TABLE_X
【问题讨论】:
标签: postgresql
我需要从 Postgres SQL 中删除选定的表。最好使用like 或where 子句。
像我一样
TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N
我要删除
TABLE_A to TABLE_X
【问题讨论】:
标签: postgresql
可以使用单个命令完成,速度更快 - 以防这是一项重复性任务。
如果不确定是否存在任何表,请添加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() 生成请求的表名。更多内容:
【讨论】:
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;
【讨论】: