PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zainicjuj bazę danych Postgres w Docker Compose

Udało mi się go uruchomić za pomocą niestandardowego Dockerfile , oto moje rozwiązanie:

Struktura projektu

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

Pliki

  1. CSV plik znajduje się w data folder wewnątrz projektu.

  2. W folderze projektu znajduje się następujący docker-compose.yml plik:

    Wersja
    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 zawiera:

    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 ciało:

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

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

Wyjaśnienie

1_init.sql tworzy tabelę DB, musi mieć takie same nazwy kolumn jak w pliku CSV . 2_copy.sql odpowiada za kopiowanie danych z pliku CSV do postgres.

Dockerfile używa obrazu postgres i kopiuje wszystkie *.sql pliki do /docker-entrypoint-initdb.d/ . Później wszystkie pliki są wykonywane w kolejności alfanumerycznej, dlatego *.sql pliki zaczynają się od cyfr. Wreszcie port 6666 jest narażony.

docker-compose.yml buduje Dockerfile z db folder i udostępnij go przez 5431 Port. Jako właściwości środowiskowe stosuje się podstawowe właściwości postgresu. A na końcu data folder z plikiem CSV jest kopiowany do kontenera.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql escape w pojedynczym cudzysłowie w klauzuli where

  2. sqlalchemia symetryczna przyjaźń wiele do jednego

  3. Jak połączyć aktywnych użytkowników z bazą danych postgreSQL przez SQL?

  4. PostreSQL 10 nie uruchamia się na Ubuntu 18.04 działającym na podsystemie Windows dla systemu Linux

  5. Wybierz komórki wierszy jako nowe kolumny