PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Инициализирайте Postgres db в Docker Compose

Успях да го накарам да работи с персонализиран 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате Flask/Peewee с Heroku?

  2. Отмяна на транзакция при задействане ГРЕШКА

  3. psycopg2 не може да намери никакви таблици след свързване

  4. Оптимизирайте бавните агрегати в LATERAL съединение

  5. PostgreSQL Composite Primary Key и Serial нарастване?