postgres как отбросить всю таблицу в схеме через команду


10

Я использую postgresql, и мне нужно удалить все таблицы, присутствующие в схеме. Как я могу удалить из командной строки.

Ответы:


17

Вы хотите использовать 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()если хотите отбросить все таблицы в другой схеме.


когда я использую DROP SCHEMA schemaname CASCADE; получаю ошибку ОШИБКА: синтаксическая ошибка в или около "DROP" ЛИНИЯ 2: Схема DROP
asalthangam

2
LINE 2? Что в строке 1?
Philᵀᴹ

на самом деле мне нужно удалить все таблицы и его зависимый объект. но это не должно удалять процедуру и все ..
asalthangam

но когда я использую команду удаления схемы, она также удаляет схему. в моем случае схема должна существовать
asalthangam

@asalthangam ответ обновлен
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(работает, только что протестировано с Postgresql 9.6.3, может не работать с предыдущими выпусками)


1

@Техно Савви

Удалить таблицы, используя синтаксис postgres:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

Скопируйте полученный текст в скрипт sql или psql терминал. Обратите внимание, что команды закомментированы.


Я думаю, что вопрос был в том, чтобы отбрасывать таблицы в определенной схеме.
Мустаччо

-2

Если вы просто хотите действительно простой способ сделать это .. Вот сценарий, который я использовал в прошлом

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.


3
Вопрос в Postgres, а не в Oracle.
Philᵀᴹ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.