sql >> Databáze >  >> RDS >> PostgreSQL

Inicializujte Postgres db v Docker Compose

Podařilo se mi to zprovoznit pomocí vlastního Dockerfile , zde je moje řešení:

Struktura projektu

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

Soubory

  1. CSV soubor je umístěn v data složky uvnitř projektu.

  2. Ve složce projektu je následující docker-compose.yml soubor:

    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 obsahuje:

    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 tělo:

    CREATE TABLE table_name
    (
       --statement body
    );
    
  5. A 2_copy.sql :

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

Vysvětlení

1_init.sql vytvoří tabulku DB, musí mít stejné názvy sloupců jako v souboru CSV . 2_copy.sql je zodpovědný za kopírování dat z CSV do postgres.

Dockerfile používá postgres image a zkopíruje všechny *.sql soubory do /docker-entrypoint-initdb.d/ . Později jsou všechny soubory spouštěny v alfanumerickém pořadí, proto *.sql soubory začínají číslicemi. Nakonec port 6666 je vystavena.

docker-compose.yml vytvoří Dockerfile z db složku a zpřístupněte ji prostřednictvím 5431 přístav. Jako environmentální vlastnosti se používají základní postgresové vlastnosti. A na konci data složka se souborem CSV se zkopíruje do kontejneru.




  1. Jak předat parametry skriptům SQL pomocí příkazového řádku

  2. vytvoření jedinečného názvu stránky slimáci php

  3. Zlepší přesun dat z EBS do dočasného úložiště výkon dotazů MySQL?

  4. SQL Server dynamický PIVOT dotaz?