2010-01-22 55 views
18

我正在寻找一种简单的方法来删除数据库中的所有数据并保留结构(表格,关系等)。 我使用postgreSQL,但我认为,如果有一个命令来做到这一点,它不是特定于postgres。如何清空SQL数据库?

感谢,

达明

+1

您should't转储数据库这个operation.This问题可以解决得更有效率。 http://stackoverflow.com/questions/2829158 – ijusti 2014-06-18 08:00:49

回答

28

使用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;其他DBMS可能有自己的工具。我不知道有任何通用工具可以做到。

编辑:

发表意见之后,你可能想跳过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

+1

一个有趣的选项。不过,我会保持警惕的。我想我对删除整个数据库感到紧张,但那只是我自己。 :) – ZombieSheep 2010-01-22 14:12:11

+0

没有必要保持警惕。如果OP想要一种截断整个数据库的方法,那么这是一个更好的方法。没有日志截断,并且更快。 – Timothy 2010-01-22 14:15:22

+0

可悲的是我们意识到没有更简单的方法可以做到这一点,感谢 – Damien 2011-03-21 15:14:42

2

我不是一个Postgres的家伙,但其中一个方案是通过表进行迭代,并发出对每一个Truncate命令。但是,您必须考虑可关联的关系 - 例如,在引用数据之前,您将无法删除参考数据。

6

你可以做这样的事情:

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 

它会做什么是必要的。

当然,这些导出并不是必需的,但是它们可以使运行psql的2个副本变得更简单,而不必将所有标准的-U,-d等等都交给它们。

有一件事 - 尽管使用TRUNCATE来做到这一点,但它的速度比DELETE快,但它有一些缩水现象 - 例如它不会被Slony和任何其他工作在触发器上的复制系统所复制。除非您正在使用PostgreSQL 8.4,并且您的复制知道如何在TRUNCATE上使用触发器。

-1

您可以通过以下三个步骤

数据库的
  1. 采取脚本
    1. 右键单击您的数据库中删除你的数据库的所有记录无外键的限制(您的数据库名称)
    2. 点击任务,然后“生成脚本”
    3. 指定位置
  2. 删除你的数据库的基础
  3. 重新创建一个数据库具有相同的名称,并运行你生成的脚本

这样,您就可以清空所有数据库的

+0

“右键单击您的数据库”是指特定的SQL(GUI)客户端。你应该提到你指的是哪个SQL客户端。 – 2016-05-14 12:12:41

+0

Microsft Sql服务器@a_horse_with_no_name感谢您指出 – 2016-05-14 12:47:18

+2

那么问题是Postgres,而不是SQL Server。 – 2016-05-14 13:08:55

1

在pgAdmin的,你可以这样做:

  • 右击数据库 - >备份,选择“仅架构”
  • 删除数据库
  • 创建新的数据库,并将其命名为像前
  • 右键单击新的数据库 - >还原 - >选择备份,选择“仅架构”