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

postgres dockerイメージを使用してデータを永続化する方法は?

    まず、これらの環境変数は疑わしいように見えます。 公式Dockerイメージのドキュメント をご覧ください。 、POSTGRES_DBが必要であることに注意してください 、POSTGRES_USER 、およびPOSTGRES_PASSWORDDB_NAMEではなく 、DB_USER 、およびDB_PASS

    それ以外は、ほとんど正しい方向に進んでいるようです。完全な例は次のとおりです。

    まず、Postgresコンテナを起動します。永続ストレージをホームディレクトリの外のどこかに配置しています。これは、ファイルが自分で所有されないことをすでに説明しているため、ホームディレクトリで混乱する可能性があります(必ずしも問題があるとは限りません)。

    docker run --rm --name postgres \
      -v /tmp/postgres:/var/lib/postgresql/data \
      -e POSTGRES_DB=larstest \
      -e POSTGRES_USER=lars \
      -e POSTGRES_PASSWORD=secret postgres
    

    そのデータディレクトリをポイントしてpostgresを開始するのはこれが初めてなので、データベースが初期化されることがわかります。

    The database cluster will be initialized with locale "en_US.utf8".
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".
    
    Data page checksums are disabled.
    
    fixing permissions on existing directory /var/lib/postgresql/data ... ok
    creating subdirectories ... ok
    selecting default max_connections ... 100
    selecting default shared_buffers ... 128MB
    selecting dynamic shared memory implementation ... posix
    creating configuration files ... ok
    running bootstrap script ... ok
    performing post-bootstrap initialization ... ok
    syncing data to disk ... ok
    
    Success. You can now start the database server using:
    

    これで、別のウィンドウから接続できます...

    $ psql -h 172.17.0.4 -U lars larstest
    Password for user lars: 
    psql (9.5.4, server 9.6.0)
    WARNING: psql major version 9.5, server major version 9.6.
             Some psql features might not work.
    Type "help" for help.
    

    ...そしていくつかのデータを作成します:

    larstest=# create table testtable (id integer);
    CREATE TABLE
    larstest=# insert into testtable values (1);
    INSERT 0 1
    larstest=# select * from testtable;
     id 
    ----
      1
    (1 row)
    

    ここで、コンテナを終了します:

    ^CLOG:  received fast shutdown request
    LOG:  aborting any active transactions
    FATAL:  terminating connection due to administrator command
    LOG:  autovacuum launcher shutting down
    LOG:  shutting down
    LOG:  database system is shut down
    

    実行されていないことを確認できます:

    $ docker ps | grep postgres
    

    ただし、同じコマンドライン引数を使用して再起動すると、

    docker run --rm --name postgres \
      -v /tmp/postgres:/var/lib/postgresql/data \
      -e POSTGRES_DB=larstest \
      -e POSTGRES_USER=lars \
      -e POSTGRES_PASSWORD=secret postgres
    

    すでに存在しているため、データベースが初期化されていないことがわかり、次の場所に直接スキップします。

    LOG:  database system was shut down at 2016-10-21 03:13:50 UTC
    LOG:  MultiXact member wraparound protections are now enabled
    LOG:  database system is ready to accept connections
    LOG:  autovacuum launcher started
    

    この時点で、データベースに再接続して、データがまだ存在していることを確認できます。

    $ psql -h 172.17.0.2 -U lars larstest
    Password for user lars: 
    psql (9.5.4, server 9.6.0)
    WARNING: psql major version 9.5, server major version 9.6.
             Some psql features might not work.
    Type "help" for help.
    
    larstest=# select * from testtable;
     id 
    ----
      1
    (1 row)
    

    これでほぼすべてです。




    1. クエリはクエリアナライザでは高速に実行されますが、C#アプリケーションでは低速です

    2. MySQL Insert Gson Date

    3. SQLOracleのregexp_substrを使用して特定の単語の後に単語を取得します

    4. Laravelグローバル設定モデル