Как очистить базу данных SQL? - PullRequest
18 голосов
/ 22 января 2010

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

Спасибо

Дэмиен

Ответы [ 5 ]

30 голосов
/ 22 января 2010

Дамп схемы, используя 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.

6 голосов
/ 22 января 2010

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

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, имеет свои дробэки - например - оно не реплицируется Slony и любой другой системой репликации, которая работает на триггерах. Если вы не работаете с PostgreSQL 8.4 и ваша репликация не знает, как использовать триггеры в TRUNCATE.

2 голосов
/ 22 января 2010

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

1 голос
/ 29 марта 2017

В pgAdmin вы можете сделать:

  • Щелкните правой кнопкой мыши базу данных -> резервное копирование, выберите «Только схема»
  • Удалить базу данных
  • Создайте новую базу данных и назовите ее как прежнюю
  • Щелкните правой кнопкой мыши новую базу данных -> восстановить -> выберите резервную копию, выберите «Только схема»
0 голосов
/ 14 мая 2016

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

  1. Возьми скрипт своей базы данных
    1. Щелкните правой кнопкой мыши по вашей базе данных (ваше имя БД)
    2. нажмите на задание и затем "Сгенерировать скрипт"
    3. Укажите местоположение
  2. Удалить базу данных
  3. воссоздать базу данных с тем же именем и запустить созданный вами скрипт

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

...