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

DockerでのPostgresコンテナの起動と入力

    たくさんの戦いの後、私は解決策を見つけました;-)

    私にとって、ここに投稿されたコメントは非常に役に立ちました:https://registry.hub.docker.com/_/postgres/ from "justfalter"

    とにかく、私はこのようにしました:

    # Dockerfile
    FROM postgres:9.4
    
    RUN mkdir -p /tmp/psql_data/
    
    COPY db/structure.sql /tmp/psql_data/
    COPY scripts/init_docker_postgres.sh /docker-entrypoint-initdb.d/
    

    db/structure.sql はSQLダンプであり、最初のテーブルスペースを初期化するのに役立ちます。

    次に、init_docker_postgres.sh

    #!/bin/bash
    
    # this script is run when the docker container is built
    # it imports the base database structure and create the database for the tests
    
    DATABASE_NAME="db_name"
    DB_DUMP_LOCATION="/tmp/psql_data/structure.sql"
    
    echo "*** CREATING DATABASE ***"
    
    # create default database
    gosu postgres postgres --single <<EOSQL
      CREATE DATABASE "$DATABASE_NAME";
      GRANT ALL PRIVILEGES ON DATABASE "$DATABASE_NAME" TO postgres;
    EOSQL
    
    # clean sql_dump - because I want to have a one-line command
    
    # remove indentation
    sed "s/^[ \t]*//" -i "$DB_DUMP_LOCATION"
    
    # remove comments
    sed '/^--/ d' -i "$DB_DUMP_LOCATION"
    
    # remove new lines
    sed ':a;N;$!ba;s/\n/ /g' -i "$DB_DUMP_LOCATION"
    
    # remove other spaces
    sed 's/  */ /g' -i "$DB_DUMP_LOCATION"
    
    # remove firsts line spaces
    sed 's/^ *//' -i "$DB_DUMP_LOCATION"
    
    # append new line at the end (suggested by @Nicola Ferraro)
    sed -e '$a\' -i "$DB_DUMP_LOCATION"
    
    # import sql_dump
    gosu postgres postgres --single "$DATABASE_NAME" < "$DB_DUMP_LOCATION";
    
    
    echo "*** DATABASE CREATED! ***"
    

    最後に:

    # no postgres is running
    [myserver]# psql -h 127.0.0.1 -U postgres
    psql: could not connect to server: Connection refused
        Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?
    
    [myserver]# docker build -t custom_psql .
    [myserver]# docker run -d --name custom_psql_running -p 5432:5432 custom_psql
    
    [myserver]# docker ps -a
    CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                    NAMES
    ce4212697372        custom_psql:latest   "/docker-entrypoint.   9 minutes ago       Up 9 minutes        0.0.0.0:5432->5432/tcp   custom_psql_running
    
    [myserver]# psql -h 127.0.0.1 -U postgres
    psql (9.2.10, server 9.4.1)
    WARNING: psql version 9.2, server version 9.4.
             Some psql features might not work.
    Type "help" for help.
    
    postgres=# 
    
    # postgres is now initialized with the dump
    

    お役に立てば幸いです。



    1. SQLSELECTINTOステートメント

    2. RMANバックアップコマンド

    3. MySQLWorkbenchを使用したビジュアルデータベースの作成

    4. OracleUnicodeスプーリング