18

データベースからすべてのデータを削除し、構造(テーブル、関係など)を保持する簡単な方法を探しています。私はpostgreSQLを使用していますが、それを実行するコマンドがある場合、それはpostgresに固有のものではないと思います。

ありがとう、

ダミアン

4

5 に答える 5

31

を使用してスキーマをダンプします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

于 2010-01-22T14:11:03.190 に答える
6

あなたはこのようなことをすることができます:

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でトリガーを使用する方法を知っている場合を除きます。

于 2010-01-22T14:28:06.240 に答える
2

私はPostgresの人ではありませんが、1つのオプションは、テーブルを反復処理して、各テーブルに対してTruncateコマンドを発行することです。ただし、可愛らしい関係を考慮に入れる必要があります。たとえば、参照データを参照するデータの前に参照データを削除することはできません。

于 2010-01-22T14:10:23.853 に答える
1

pgAdminでは次のことができます。

  • [データベース]->[バックアップ]を右クリックし、[スキーマのみ]を選択します
  • データベースを削除します
  • 新しいデータベースを作成し、前者のように名前を付けます
  • 新しいデータベースを右クリック->復元->バックアップを選択し、[スキーマのみ]を選択します
于 2017-03-29T12:06:56.357 に答える
-1

次の3つの手順により、外部キーの制限なしにデータベースのすべてのレコードを削除できます。

  1. データベースのスクリプトを取得します
    1. データベース(DB名)を右クリックします
    2. タスクをクリックしてから「スクリプトの生成」をクリックします
    3. 場所を指定する
  2. データベースベースを削除します
  3. 同じ名前のデータベースを再作成し、生成したスクリプトを実行します

このようにして、すべてのデータベースを空にすることができます

于 2016-05-14T12:04:21.740 に答える