【问题标题】:Delete selected tables from Postgres sql从 Postgresql 中删除选定的表
【发布时间】:2018-11-29 02:35:29
【问题描述】:

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

像我一样

TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N

我要删除

TABLE_A to TABLE_X

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    可以使用单个命令完成,速度更快 - 以防这是一项重复性任务。

    如果不确定是否存在任何表,请添加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() 生成请求的表名。更多内容:

    【讨论】:

      【解决方案2】:
      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;
      

      【讨论】:

      • 错误:缺少表“c”的 FROM 子句条目
      • 对不起,我用的参数多了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2016-07-24
      • 1970-01-01
      • 2016-02-15
      相关资源
      最近更新 更多