Многие конечно не будут заморачиваться удалением таблиц и удалят и создадут заново базу, это удобно если у Вас только один пользователь имеет доступ к БД с простыми набором правами, но пользователей много, то удаление может быть не самой хорошей идеей.
Итак как удалить все таблицы из БД 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
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.