4

重複の可能性:
postgres データベース内のすべてのテーブルを切り捨てる

データベースを削除せずにすべてのテーブルからすべてのデータを削除するにはどうすればよいですか?

4

4 に答える 4

5

DatabaseCleaner gemを使用します。

DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean

これを rake タスク内に絶対に含める必要がある場合は、自分でラップしてください。

于 2012-11-13T16:19:28.257 に答える
5

生の接続オブジェクトを使用して、SQL ステートメントを実行できます。

connection = ActiveRecord::Base.connection
connection.tables.each{|t| connection.execute "TRUNCATE #{t}"}
于 2012-11-13T10:47:39.470 に答える
2

アドホック使用向け

データベースで次のステートメントを実行します (注意してください! すべてのデータを削除してください!):

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 は構造全体をファイル レベルでコピーするため、これは非常に高速です。同時実行性の問題や、速度を低下させるその他のオーバーヘッドはありません。

于 2012-11-13T11:03:08.550 に答える
1

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 
于 2012-11-13T11:47:18.587 に答える