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

既存のデータでPostgreSQLコンテナを使用するにはどうすればよいですか?

    irakliの答えに基づいて構築するために、更新されたソリューションは次のとおりです。

    • 新しいバージョン2のDocker作成ファイルを使用する
    • 個別のvolumes セクション
    • 余分な設定が削除されました

    docker-compose.yml

    version: '2'
    
    services:
      postgres9:
        image: postgres:9.4
        expose:
          - 5432
        volumes:
          - data:/var/lib/postgresql/data
    
    volumes:
      data: {}
    

    デモ

    Postgresデータベースサーバーを起動します:

    $ docker-compose up
    

    データベース内のすべてのテーブルを表示します。別のターミナルで、コンテナのPostgresに話しかけます:

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
    

    データベースが空白であるため、何も表示されません。テーブルを作成します:

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
    

    新しく作成されたテーブルを一覧表示します:

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                             Access privileges
     Schema |   Name    | Type  | Access privileges | Column access privileges 
    --------+-----------+-------+-------------------+--------------------------
    public | beer      | table |                   | 
    

    わーい!これで、共有ストレージボリュームを使用してPostgresデータベースを起動し、そこにいくつかのデータを保存しました。次のステップは、サーバーが停止した後、データが実際に残っていることを確認することです。

    次に、Postgresサーバーコンテナを強制終了します:

    $ docker-compose stop
    

    Postgresコンテナを再度起動します:

    $ docker-compose up
    

    データベースサーバーがストレージを再利用することを期待しているため、非常に重要なデータがまだそこにあります。チェック:

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                             Access privileges
     Schema |   Name    | Type  | Access privileges | Column access privileges 
    --------+-----------+-------+-------------------+--------------------------
    public | beer      | table |                   | 
    

    新しいスタイルのDockerComposeファイルを使用して、外部データボリュームを使用してPostgresデータベースを実行し、データの安全性と健全性が維持されていることを確認しました。

    データの保存

    まず、バックアップを作成し、データをホストに保存します:

    $ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
    

    ゲストデータベースからデータをザッピングします:

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
    

    バックアップ(ホストに保存されている)をPostgresコンテナに復元します。

    注: 「exec-i」を使用します。ではありません 「-it」を指定しないと、「入力デバイスはTTYではありません」というエラーが発生します。

    $ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
    

    テーブルを一覧表示して、復元が機能したことを確認します。

    $ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                             Access privileges
    Schema |   Name    | Type  | Access privileges | Column access privileges 
    --------+-----------+-------+-------------------+--------------------------
    public | beer      | table |                   | 
    

    要約すると、データベースを起動でき、再起動後もデータが保持され、ホストからデータベースにバックアップを復元できることを確認しました。

    Tomaszに感謝します!



    1. MicrosoftAccess使用時のアーキテクチャの不一致エラーの回避策

    2. Oracleインデックスを選択して最適化する方法は?

    3. MariaDBでのEXPORT_SET()のしくみ

    4. サブフォームを使用したTreeViewコントロール