Я использую postgresql, и мне нужно удалить все таблицы, присутствующие в схеме. Как я могу удалить из командной строки.
Я использую postgresql, и мне нужно удалить все таблицы, присутствующие в схеме. Как я могу удалить из командной строки.
Ответы:
Вы хотите использовать CASCADE
опцию DROP SCHEMA
. Из документации :
CASCADE
- Автоматически отбрасывать объекты (таблицы, функции и т. Д.), Содержащиеся в схеме, и, в свою очередь, все объекты, которые зависят от этих объектов.
БУДЬТЕ ОСТОРОЖНЫ - акцент выше моего.
Очевидно, вам нужно будет воссоздать схему впоследствии.
Чтобы просто удалить все таблицы в текущей схеме, вы можете использовать этот скрипт:
DO $$ DECLARE
tabname RECORD;
BEGIN
FOR tabname IN (SELECT tablename
FROM pg_tables
WHERE schemaname = current_schema())
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;
Измените, WHERE schemaname = current_schema()
если хотите отбросить все таблицы в другой схеме.
LINE 2
? Что в строке 1?
@Техно Савви
Удалить таблицы, используя синтаксис postgres:
select '-- drop table ' || tablename || ' cascade;' from pg_tables
where tablename not like 'pg%' and tablename not like 'sql%';
Скопируйте полученный текст в скрипт sql или psql терминал. Обратите внимание, что команды закомментированы.
Если вы просто хотите действительно простой способ сделать это .. Вот сценарий, который я использовал в прошлом
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Это выведет серию команд удаления для всех таблиц в схеме. Подпишите результат этого запроса и выполните его.
Аналогично, если вы хотите очистить не только таблицы, вы можете отредактировать следующее в соответствии со своими потребностями.
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Источник: https://forums.oracle.com/forums/thread.jspa?threadID=614090.