public
完全なテーブル構造、データ、関数、fk、pkなどを使用してスキーマを同じデータベースにコピーする方法。Postgresの
バージョンは8.4
PSです。データベースではなくスキーマをコピーする必要があります。
public
完全なテーブル構造、データ、関数、fk、pkなどを使用してスキーマを同じデータベースにコピーする方法。Postgresの
バージョンは8.4
PSです。データベースではなくスキーマをコピーする必要があります。
回答:
pg_dump / pg_restore自体でこれを行う簡単な方法はありません。データベースを一時的に削除できる場合は、次を試すことができます。
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
。スーパーユーザ(として最も簡単postgres
PW-少ないと)peer
で承認pg_haba.conf
。元のスキーマの名前を変更した後に復元しますpsql my_db -f '/path/to/file.pgsql'
。プレーンなSQLダンプがある場合は、必要ありませんpg_restore
。
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
あなたがPHPで立ち往生している場合は、いずれかのバックティックを使用してください
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
またはexec()コマンド。変更については、sedを同じ方法で使用できます。
ここに6つの文字があります
public
です。
pgAdminを使用すると、次のことができます。かなり手作業ですが、必要なものはこれだけです。スクリプトベースのアプローチがはるかに望ましいでしょう。管理者アクセス権がなく、データベースが大きい場合、これがどの程度うまく機能するかはわかりませんが、ローカルコンピューターにある開発データベースでは問題なく機能するはずです。
コピーするスキーマ名を右クリックし、[バックアップ]をクリックします。(これよりも深く、両方ではなく構造をバックアップすることを選択できます)。
バックアップファイルに名前を付け、形式も選択します。(私は通常Tarを使用します。)
バックアップをクリックします。
バックアップ元のスキーマを右クリックし、プロパティをクリックして、一時的に別の名前に変更します。(例:temprename)
スキーマルートをクリックし、オブジェクトブラウザで右クリックして、[ 新しいスキーマの作成 ]をクリックし、スキーマにpublicという名前を付けます。これは、バックアップからコピーするスキーマになります。
手順5で公開した新しいスキーマを右クリックして、[復元]をクリックします。手順3のバックアップファイルから復元します。
新しいスキーマpublicを別の名前に変更します(例newschema)。
スキーマtemprenameの変更をステップ4から元の名前に変更します。
使用できます
CREATE DATABASE new_db TEMPLATE = old_db;
次に、不要なスキーマをすべて削除します。
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
唯一の欠点は、コピーを作成する前にold_dbへのすべての接続を決定する必要があることです(したがって、CREATE DATABASE
ステートメントを実行するプロセスは、たとえばtemplate1に接続する必要があります)。
それがオプションではない場合、pg_dump / pg_restoreがそれを行う唯一の方法です。
user1113185 answerを展開すると、psql / pg_dumpを使用した完全なワークフローがあります。
以下は、データベース内ののすべてのオブジェクトをエクスポートold_schema
し、新しいnew_schema
スキーマにインポートします。user
dbname
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public
ますか?