PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Inisialisasi Postgres db di Docker Compose

Saya berhasil membuatnya bekerja menggunakan Dockerfile khusus , inilah solusi saya:

Struktur proyek

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

File

  1. CSV file terletak di data folder di dalam proyek.

  2. Di folder proyek ada docker-compose.yml berikut ini berkas:

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

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

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

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

Penjelasan

1_init.sql membuat tabel DB, harus memiliki nama kolom yang sama seperti pada file CSV . 2_copy.sql bertanggung jawab untuk menyalin data dari CSV ke postgres.

Dockerfile menggunakan gambar postgres dan menyalin semua *.sql file ke /docker-entrypoint-initdb.d/ . Kemudian, semua file dieksekusi dalam urutan alfanumerik, itulah sebabnya *.sql file dimulai dengan angka. Terakhir, port 6666 terungkap.

docker-compose.yml membangun Dockerfile dari db folder dan membuatnya dapat diakses melalui 5431 Pelabuhan. Sebagai properti lingkungan, properti postgres dasar digunakan. Dan di akhir data folder dengan file CSV disalin ke penampung.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AMD, Intel, dan PostgreSQL

  2. Bagaimana Anda membuat PyPy, Django dan PostgreSQL bekerja bersama?

  3. Membuat urutan PostgreSQL ke bidang (yang bukan ID catatan)

  4. Periksa apakah asosiasi ada tanpa menimbulkan hit basis data

  5. Bagaimana saya bisa mencegah injeksi SQL dengan string kueri JSONB sewenang-wenang yang disediakan oleh klien eksternal?