Удалить выбранные таблицы из Postgres sql - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно удалить выбранные таблицы из Postgres SQL .Было бы лучше использовать like или where предложение.

Как и у меня

TABLE_A
TABLE_B
TABLE_C
-
-
-
TABLE_N

Мне нужно удалить

TABLE_A to TABLE_X

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Я получил некоторую идею от @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;
0 голосов
/ 29 ноября 2018

Может быть выполнено с помощью одной команды, которая работает быстрее - в случае, если это повторяющаяся задача.

Добавьте 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() для генерации запрошенных имен таблиц.Подробнее здесь:

0 голосов
/ 29 ноября 2018
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...