可能重复:
截断 postgres 数据库中的所有表
如何在不删除数据库的情况下从所有表中删除所有数据?
可能重复:
截断 postgres 数据库中的所有表
如何在不删除数据库的情况下从所有表中删除所有数据?
您可以使用原始连接对象来执行 SQL 语句:
connection = ActiveRecord::Base.connection
connection.tables.each{|t| connection.execute "TRUNCATE #{t}"}
使用DatabaseCleaner gem。
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
如果您绝对必须在 rake 任务中包含此内容,请自己将其打包。
在数据库中运行此语句(小心!核对所有数据!):
DO
$func$
BEGIN
EXECUTE (
SELECT 'TRUNCATE TABLE '
|| string_agg(quote_ident(t.tablename), ', ')
|| ' CASCADE'
FROM pg_tables t
WHERE t.schemaname = 'public' -- assuming default schema
);
END
$func$;
该DO
命令是在 PostgreSQL 9.0 中引入的。您将创建一个 plpgsql 函数并为旧版本执行它。
与密切相关的问题进行比较:截断 Postgres 数据库中的所有表
my_template
使用您的 vanilla 结构和所有空表创建一个“模板”数据库(让我们命名它)可能更简单(而且更快!) 。然后经过一个DROP
/CREATE DATABASE
循环:
DROP DATABASE mydb;
CREATE DATABASE mydb TEMPLATE my_template;
这是非常快的,因为 PostgreSQL 在文件级别复制整个结构。没有并发问题或其他开销减慢您的速度。
您可以使用 pg_dump 对数据库进行备份,并使用 pg_resotre --schema-only 仅恢复数据库的模式,它会删除所有表中的所有数据。
示例:
要备份。
pg_dump --format=c --compress=0 -h localhost mydatabasename > mydump.dmp
只恢复没有数据的模式信息。
pg_restore -c --schema-only mydump.dmp | psql -h localhost mydatabasename