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

DockerComposeでPostgresデータベースを初期化します

    カスタムのDockerfileを使用してそれを機能させることができました 、これが私の解決策です:

    プロジェクトの構造

    data/
      datasource.csv
    db/
      scripts/
        1_init.sql
        2_copy.sql
      Dockerfile
    docker-compose.yml
    

    ファイル

    1. CSV ファイルはdataにあります プロジェクト内のフォルダ。

    2. プロジェクトフォルダーには、次のdocker-compose.ymlがあります。 ファイル:

      version: '3.3'
      
      services:
        db:
          build: ./db
          container_name: postgres
          ports:
            - "5431:6666"
          environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
            - POSTGRES_DB=db_name
          volumes:
            - ./data:/data
      
    3. Dockerfile 含まれるもの:

      FROM postgres:alpine
      ADD scripts/1_init.sql /docker-entrypoint-initdb.d
      ADD scripts/2_copy.sql /docker-entrypoint-initdb.d
      RUN chmod a+r /docker-entrypoint-initdb.d/*
      EXPOSE 6666
      
    4. 1_init.sql 本体:

      CREATE TABLE table_name
      (
         --statement body
      );
      
    5. そして2_copy.sql

      COPY table_name FROM '/data/datasource.csv' DELIMITER ',' CSV HEADER;
      

    説明

    1_init.sql DBテーブルを作成します。CSVファイルと同じ列名である必要があります2_copy.sql CSVからpostgresにデータをコピーする責任があります。

    Dockerfile postgresイメージを使用し、すべての*.sqlをコピーします /docker-entrypoint-initdb.d/へのファイル 。その後、すべてのファイルが英数字順に実行されるため、*.sql ファイルは数字で始まります。最後に、ポート6666 露出しています。

    docker-compose.yml Dockerfileをビルドします dbから フォルダを作成し、5431からアクセスできるようにします ポート。環境プロパティとして、基本的なpostgresプロパティが使用されます。そして最後にdata CSVファイルのあるフォルダがコンテナにコピーされます。




    1. MySQL:クライアント側とサーバー側の両方でローカルのデータのロードを有効にする方法

    2. 署名されていないMySQLTINYINT

    3. エクスクルーシブ!アクセスプログラムマネージャーのゲストミハルバーにご参加ください

    4. opatchの前提条件