Как удалить каждую таблицу в указанной c схеме в postgres? - PullRequest
2 голосов
/ 13 января 2020

Как удалить все таблицы, которые у меня есть в указанной c схеме? Только таблицы в схеме должны быть удалены. У меня уже есть все имена таблиц, которые я получил с помощью приведенного ниже кода, но как удалить все эти таблицы?

Ниже приведен некоторый код psycopg2, а ниже - SQL, сгенерированный

* 1004. *

SELECT table_name FROM information_schema.tables WHERE table_schema='mySchema'

Ответы [ 2 ]

4 голосов
/ 13 января 2020

Для этого вы можете использовать anonymous code block.

Внимание : Мы говорим о DROP TABLE утверждениях, и они действительно подлые, если вы допустили ошибку;) Опция CASCADE также удаляет зависимые объекты. Используйте это с осторожностью!

DO $$
DECLARE
  row record;
BEGIN
    FOR row IN SELECT * FROM pg_tables WHERE schemaname = 'mySchema' 
    LOOP
      EXECUTE 'DROP TABLE mySchema.' || quote_ident(row.tablename) || ' CASCADE';
    END LOOP;
END;
$$;

Если вы хотите удалить все в своей схеме, включая обертки, последовательности и т. Д. c., Рассмотрите возможность удаления самой схемы и ее повторного создания:

DROP SCHEMA mySchema CASCADE;
CREATE SCHEMA mySchema;
2 голосов
/ 13 января 2020

Для однострочной команды вы можете использовать psql и ее \gexec функциональность:

SELECT format('DROP TABLE %I.%I', table_schema, table_name)
FROM information_schema.tables
WHERE table_schema= 'mySchema';\gexec

, которая будет запускать запрос и выполнять каждую строку результата как команду SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...