Подтвердить что ты не робот

Как очистить базу данных SQL?

Я ищу простой способ удалить все данные из базы данных и сохранить структуру (таблицу, отношения и т.д.). Я использую postgreSQL, но думаю, если есть команда для этого, это не относится к postgres.

Спасибо,

Damien

4b9b3361

Ответ 1

Сбросьте схему с помощью 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.

Ответ 2

Вы можете сделать что-то вроде этого:

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.

Ответ 3

Я не парень Postgres, но одним из вариантов было бы перебирать таблицы и вызывать команду Truncate против каждого один. Вы должны будете учитывать отношения otable, однако - вы не сможете удалять ссылочные данные перед данными, которые относятся к нему, например.

Ответ 4

В pgAdmin вы можете:

  • Щелкните правой кнопкой мыши базу данных → резервное копирование, выберите "Только схема"
  • Отбросить базу данных
  • Создайте новую базу данных и назовите ее как бывшую
  • Щелкните правой кнопкой мыши новую базу данных → restore → выберите резервную копию, выберите "Только схема"

Ответ 5

вы можете удалить все записи своей базы данных без ограничения внешних ключей, выполнив следующие три действия:

  • Возьмите script вашей базы данных
    • Щелкните правой кнопкой мыши на вашей базе данных (ваше имя БД)
    • нажмите на задачу, а затем "Создать script"
    • Укажите местоположение
  • Удалить базу данных
  • воссоздайте базу данных с тем же именем и запустите созданный script

Таким образом, вы можете очистить всю базу данных