从Postgres SQL中删除选定的表

时间:2018-11-29 02:35:29

标签: postgresql

我需要从 Postgres SQL 中删除选定的表。最好使用likewhere子句。

就像我有

TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N

我需要删除

TABLE_A to TABLE_X

3 个答案:

答案 0 :(得分:2)

可以使用单个命令来完成,这是更快的操作-如果这是重复执行的任务。

如果不确定任何表的存在,请添加IF EXISTS。这样,我们可以省去系统目录(information_schema.tablespg_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;