Я ищу простой способ удалить все данные из базы данных и сохранить структуру (таблицу, отношения и т.д.). Я использую postgreSQL, но думаю, если есть команда для этого, это не относится к postgres.
Спасибо,
Damien
Я ищу простой способ удалить все данные из базы данных и сохранить структуру (таблицу, отношения и т.д.). Я использую postgreSQL, но думаю, если есть команда для этого, это не относится к postgres.
Спасибо,
Damien
Сбросьте схему с помощью pg_dump
. отбросить базу данных, воссоздать ее и загрузить схему.
Сбросьте схему базы данных (тег -s) в файл:
pg_dump -s -f db.dump DB-NAME
Удалить базу данных:
dropdb DB-NAME
Восстановите его:
createdb DB-NAME
Восстановить только схему:
pg_restore db.dump > psql DB-NAME
Это должно работать на PostgreSQL; Для других СУБД могут быть свои собственные инструменты. Я не знаю какого-либо универсального инструмента для этого.
EDIT:
Следуя комментариям, вы можете пропустить команду dropdb
и просто создать другую базу данных с помощью сбрасываемой схемы. Если все прошло хорошо, вы можете отказаться от старой базы данных:
pg_dump -s -f db.dump DB-NAME
createdb DB-NEW-NAME
pg_restore db.dump > psql DB-NEW-NAME
На этом этапе у вас есть полная база данных в DB-NAME и пустая схема в DB-NEW-NAME. после того, как вы уверены, что все в порядке, используйте dropdb DB-NAME
.
Вы можете сделать что-то вроде этого:
export PGUSER=your_pg_user
export PGHOST=database.host
export PGPORT=port
export PGDATABASE=your_database
psql -qAtX -c "select 'TRUNCATE table ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ' CASCADE;' from information_schema.tables where table_type = 'BASE TABLE' and not table_schema ~ '^(information_schema|pg_.*)$'" | psql -qAtX
Он сделает то, что необходимо.
Конечно, этот экспорт не нужен, но они упростят запуск 2-х копий psql, не прибегая к использованию всех стандартных -U, -d и т.д. переключателей.
Одна вещь: использование TRUNCATE для этого, хотя и более быстрое, чем DELETE, имеет, например, drowbacks - оно не реплицируется Slony и любой другой системой репликации, которая работает на триггеры. Если вы не работаете с PostgreSQL 8.4, и ваша репликация знает, как использовать триггеры для TRUNCATE.
Я не парень Postgres, но одним из вариантов было бы перебирать таблицы и вызывать команду Truncate против каждого один. Вы должны будете учитывать отношения otable, однако - вы не сможете удалять ссылочные данные перед данными, которые относятся к нему, например.
В pgAdmin вы можете:
вы можете удалить все записи своей базы данных без ограничения внешних ключей, выполнив следующие три действия:
Таким образом, вы можете очистить всю базу данных