sql >> データベース >  >> RDS >> PostgreSQL

1つのアクションで本番データベースからテストデータベースのクローンを作成するにはどうすればよいですか?

    既存の(ライブ)データベースの完全なコピーを作成する最も簡単で最速の方法は、 CREATE DATABASE TEMPLATEを使用

    CREATE DATABASE mydb_test TEMPLATE mydb;
    

    ただし、重要な制限があります 2番目の要件に違反しています。テンプレート(ソース)データベースに追加の接続を設定することはできません。 マニュアルを引用します:

    pg_terminate_backend()
    再接続を一時的に禁止するには、 CONNECTを取り消します 特権 (およびGRANT 後で戻る)。

    REVOKE CONNECT ON DATABASE mydb FROM PUBLIC;
    
    -- while connected to another DB - like the default maintenance DB "postgres"
    SELECT pg_terminate_backend(pid)
    FROM   pg_stat_activity
    WHERE  datname = 'mydb'                    -- name of prospective template db
    AND    pid <> pg_backend_pid();            -- don't kill your own session
    
    CREATE DATABASE mydb_test TEMPLATE mydb;
    
    GRANT CONNECT ON DATABASE mydb TO PUBLIC;  -- only if they had it before
    

    以前のバージョン Postgres9.2はprocpidを使用します pidの代わりに :

    関連:

    並行セッションを終了する余裕がない場合は、pg_dumpの出力をパイプ処理してください。 psqlへ のようなものはすでに他の回答によって提案されています。



    1. ストアドプロシージャのMySQL一時テーブルとメモリテーブル

    2. Datetimeを使用して文字列として保存された日付を比較する

    3. ドロップインクルードWebアプリケーション

    4. UNIXからOracleデータベースに接続する方法