データベースからすべてのデータを削除し、構造(テーブル、関係など)を保持する簡単な方法を探しています。私はpostgreSQLを使用していますが、それを実行するコマンドがある場合、それはpostgresに固有のものではないと思います。
ありがとう、
ダミアン
データベースからすべてのデータを削除し、構造(テーブル、関係など)を保持する簡単な方法を探しています。私はpostgreSQLを使用していますが、それを実行するコマンドがある場合、それはpostgresに固有のものではないと思います。
ありがとう、
ダミアン
を使用してスキーマをダンプします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に空のスキーマがあります。すべてがOKであることを確認したら、を使用しますdropdb DB-NAME
。
あなたはこのようなことをすることができます:
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
それは必要なことをします。
もちろん、これらのエクスポートは必須ではありませんが、すべての標準の-U、-dなどのスイッチを与えることなく、psqlの2つのコピーを実行するのが簡単になります。
ただし、TRUNCATEを使用して削除するよりも高速ですが、ドローバックがあります。たとえば、Slonyやトリガーで動作する他のレプリケーションシステムではレプリケートされません。PostgreSQL 8.4で作業していて、レプリケーションがTRUNCATEでトリガーを使用する方法を知っている場合を除きます。
私はPostgresの人ではありませんが、1つのオプションは、テーブルを反復処理して、各テーブルに対してTruncateコマンドを発行することです。ただし、可愛らしい関係を考慮に入れる必要があります。たとえば、参照データを参照するデータの前に参照データを削除することはできません。
pgAdminでは次のことができます。
次の3つの手順により、外部キーの制限なしにデータベースのすべてのレコードを削除できます。
このようにして、すべてのデータベースを空にすることができます