重複の可能性:
postgres データベース内のすべてのテーブルを切り捨てる
データベースを削除せずにすべてのテーブルからすべてのデータを削除するにはどうすればよいですか?
重複の可能性:
postgres データベース内のすべてのテーブルを切り捨てる
データベースを削除せずにすべてのテーブルからすべてのデータを削除するにはどうすればよいですか?
DatabaseCleaner gemを使用します。
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
これを rake タスク内に絶対に含める必要がある場合は、自分でラップしてください。
生の接続オブジェクトを使用して、SQL ステートメントを実行できます。
connection = ActiveRecord::Base.connection
connection.tables.each{|t| connection.execute "TRUNCATE #{t}"}
データベースで次のステートメントを実行します (注意してください! すべてのデータを削除してください!):
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
バニラ構造とすべての空のテーブルを使用して「テンプレート」データベース (名前を付けましょう) を作成する方が簡単 (かつ高速) かもしれません。次に、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