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

DockerPostgresのスクリプトでユーザー/データベースを作成する方法

    編集-2015年7月23日以降

    公式のpostgresdockerイメージは.sqlを実行します /docker-entrypoint-initdb.d/にあるスクリプト フォルダ。

    したがって、必要なのは次のSQLスクリプトを作成することだけです。

    init.sql

    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
    

    Dockerfileに追加します:

    Dockerfile

    FROM library/postgres
    COPY init.sql /docker-entrypoint-initdb.d/
    

    ただし、2015年7月8日以降、必要なのはユーザーとデータベースを作成することだけである場合POSTGRES_USERを使用する方が簡単です 、POSTGRES_PASSWORD およびPOSTGRES_DB 環境変数:

    docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
    

    またはDockerfileを使用する場合:

    FROM library/postgres
    ENV POSTGRES_USER docker
    ENV POSTGRES_PASSWORD docker
    ENV POSTGRES_DB docker
    

    2015年7月23日より古い画像の場合

    postgres Dockerイメージのドキュメントから、

    [...]そのディレクトリ[/docker-entrypoint-initdb.dで見つかった*.shスクリプトをソースします ]サービスを開始する前にさらに初期化を行う

    ここで重要なのは、「サービスを開始する前に」です。 。これは、スクリプト make_db.shを意味します postgresサービスが開始される前に実行されるため、エラーメッセージ "could not connect to database postgres"

    その後、別の有用な情報があります:

    初期化の一部としてSQLコマンドを実行する必要がある場合は、Postgresシングルユーザーモードを使用することを強くお勧めします。

    これは一見すると少し不思議なことに同意しました。つまり、初期化スクリプトは、アクションを実行する前に、postgresサービスをシングルモードで開始する必要があります。したがって、 make_db.kshを変更できます。 次のようにスクリプトを作成すると、必要なものに近づくはずです。

    、これは最近、次のコミットで変更されました。これは最新の変更で機能します:

    export PGUSER=postgres
    psql <<- EOSQL
        CREATE USER docker;
        CREATE DATABASE docker;
        GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
    EOSQL
    

    以前は、--singleを使用していました モードが必要でした:

    gosu postgres postgres --single <<- EOSQL
        CREATE USER docker;
        CREATE DATABASE docker;
        GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
    EOSQL
    


    1. パラメータスニッフィング入門書

    2. Entity Frameworkを使用してOracleパッケージ内のストアドプロシージャを呼び出す方法は?

    3. PL/SQLブロックの文字列変数からユーザーを作成します

    4. hasManyは、Sequelize.Modelのインスタンスではないもので呼び出されました