PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Khởi tạo db Postgres trong Docker Compose

Tôi đã quản lý để làm cho nó hoạt động bằng cách sử dụng Dockerfile tùy chỉnh , đây là giải pháp của tôi:

Cấu trúc dự án

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

Tệp

  1. CSV tệp nằm trong data thư mục bên trong dự án.

  2. Trong thư mục dự án có docker-compose.yml sau tệp:

    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 chứa:

    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 nội dung:

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

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

Giải thích

1_init.sql tạo bảng DB, bảng này phải có các tên cột giống như trong tệp CSV . 2_copy.sql chịu trách nhiệm sao chép dữ liệu từ CSV sang bưu điện.

Dockerfile sử dụng hình ảnh postgres và sao chép tất cả *.sql tệp tới /docker-entrypoint-initdb.d/ . Sau đó, tất cả các tệp được thực thi theo thứ tự chữ và số, đó là lý do tại sao *.sql các tệp bắt đầu bằng các chữ số. Cuối cùng, cổng 6666 được tiếp xúc.

docker-compose.yml xây dựng Dockerfile từ db và làm cho nó có thể truy cập được thông qua 5431 Hải cảng. Khi thuộc tính môi trường, các thuộc tính cơ bản của postgres được sử dụng. Và ở cuối data thư mục có tệp CSV được sao chép vào vùng chứa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chia tỷ lệ theo chiều dọc PostgreSQL

  2. Rails schema.rb không bao gồm chức năng Postgres tùy chỉnh mới

  3. Tìm câu có hai từ liền kề nhau trong Pg

  4. Trả về RDSdataService execute_statement (BadRequestException)

  5. Đổi tên một giá trị enum dẫn đến Không tìm thấy mối quan hệ kiểu