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

Я ищу простой способ удалить все данные из базы данных и держать структуру (стол, отношения, и т.д....). Я использующий postgreSQL, но я думаю, если там команда, чтобы сделать это, это не характерно для пост-ГРЭС.

Спасибо,

Дамиан

18
задан Adam Matan 22 January 2010 в 14:36
поделиться

3 ответа

Сбросить схему с использованием 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; Другие СУБД могут иметь свои собственные инструменты для этого. Я не знаю ни одного универсального инструмента, чтобы сделать это.

Редактировать:

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

pg_dump -s -f db.dump DB-NAME
createdb DB-NEW-NAME
pg_restore db.dump > psql DB-NEW-NAME

на данный момент у вас есть полная база данных при имени БД, а пустая схема в DB-New-novo. После того, как вы уверены, что все в порядке, используйте DB-имя DB .

30
ответ дан 30 November 2019 в 07:18
поделиться

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

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 и так далее, коммутаторы.

Одна вещь, однако - использование усечения, чтобы сделать это, в то время как быстрее, чем удаление, имеет его Drowbacks - например - он не воспроизводится Slony и любой другой системой репликации, которая работает на триггерах. Если вы не работаете над PostgreSQL 8.4, и ваша репликация знает, как использовать триггеры на усечении.

6
ответ дан 30 November 2019 в 07:18
поделиться

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

2
ответ дан 30 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: