我正在寻找一种简单的方法来删除数据库中的所有数据并保留结构(表格,关系等)。 我使用postgreSQL,但我认为,如果有一个命令来做到这一点,它不是特定于postgres。如何清空SQL数据库?
感谢,
达明
我正在寻找一种简单的方法来删除数据库中的所有数据并保留结构(表格,关系等)。 我使用postgreSQL,但我认为,如果有一个命令来做到这一点,它不是特定于postgres。如何清空SQL数据库?
感谢,
达明
使用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
。
一个有趣的选项。不过,我会保持警惕的。我想我对删除整个数据库感到紧张,但那只是我自己。 :) – ZombieSheep 2010-01-22 14:12:11
没有必要保持警惕。如果OP想要一种截断整个数据库的方法,那么这是一个更好的方法。没有日志截断,并且更快。 – Timothy 2010-01-22 14:15:22
可悲的是我们意识到没有更简单的方法可以做到这一点,感谢 – Damien 2011-03-21 15:14:42
我不是一个Postgres的家伙,但其中一个方案是通过表进行迭代,并发出对每一个Truncate命令。但是,您必须考虑可关联的关系 - 例如,在引用数据之前,您将无法删除参考数据。
你可以做这样的事情:
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上使用触发器。
您可以通过以下三个步骤
数据库的这样,您就可以清空所有数据库的
“右键单击您的数据库”是指特定的SQL(GUI)客户端。你应该提到你指的是哪个SQL客户端。 – 2016-05-14 12:12:41
Microsft Sql服务器@a_horse_with_no_name感谢您指出 – 2016-05-14 12:47:18
那么问题是Postgres,而不是SQL Server。 – 2016-05-14 13:08:55
在pgAdmin的,你可以这样做:
您should't转储数据库这个operation.This问题可以解决得更有效率。 http://stackoverflow.com/questions/2829158 – ijusti 2014-06-18 08:00:49