我正在寻找一种简单的方法来删除数据库中的所有数据,并保留结构(表,关系等)。我使用的是postgreSQL,但我认为,如果有一个命令可以做到这一点,它不是特定于postgres的。
谢谢,
达米恩
发布于 2010-01-22 22:28:06
你可以这样做:
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副本变得更简单,而不必为它们提供所有标准的-U、-d等开关。
不过有一件事--使用TRUNCATE来做这件事,虽然比DELETE更快,但有它的后遗症-例如- Slony和任何其他在触发器上工作的复制系统都不会复制它。除非您正在使用PostgreSQL 8.4,并且您的复制知道如何在TRUNCATE上使用触发器。
发布于 2010-01-22 22:10:24
我不喜欢Postgres,但一种选择是遍历这些表,并对每个表发出一个Truncate命令。尽管如此,你必须考虑到otable关系--例如,你不能在引用数据之前删除引用数据。
https://stackoverflow.com/questions/2117708
复制相似问题