Как удалить все таблицы из БД PostgreSQL и MySQL ?

Многие конечно не будут заморачиваться удалением таблиц и удалят и создадут заново базу, это удобно если у Вас только один пользователь имеет доступ к БД с простыми набором правами, но пользователей много, то удаление может быть не самой хорошей идеей.

Итак как удалить все таблицы из БД PostgreSQL и MySQL читаем ниже…

Удаление всех таблиц в БД для PostgreSQL:

1. Сохраняем список таблиц в файл:

psql -U PGUSER -t -d PGDBNAME -c \
"SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' \
FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n \
ON n.oid = c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN \
('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)" \
> /tmp/droptables

2. Удаляем таблицы:

psql -U PGUSER -d PGDBNAME -f /tmp/droptables

,где
PGUSER — имя пользователя
PGDBNAME — имя БД в которой нужно удалить все таблицы

Удаление всех таблиц в БД для MySQL:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD";mysql -N -s -u $USER -p$PASSWD $DB -e 'show tables' | awk '{print "drop table " $1 ";"}' | mysql -u $USER -p$PASSWD $DB

,где в переменных
DB — база в которой нужно удалить все таблицы
USER и PASSWD — логин и пароль пользователя у которого есть полные права на базу из переменной DB в которой нужно удалить все таблицы.

Так же получить список таблиц в БД можно через INFORMATION_SCHEMA и тогда запрос удаления всех таблиц будет такой:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB');" | mysql -u $USER -p$PASSWD

Если при удалении таблиц у нас появляется ошибка:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails
то перед удалением нужно отключить проверку на Foreign Key командой: SET FOREIGN_KEY_CHECKS=0;
а потом включить: SET FOREIGN_KEY_CHECKS=1;
Таким образом полная команда удаления всех таблиц из БД будет такого вида:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;'); SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB'); SELECT CONCAT('SET FOREIGN_KEY_CHECKS=1;');" | mysql -u $USER -p$PASSWD

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Хотите оставить комментарий?