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

Cách tạo Người dùng / Cơ sở dữ liệu trong tập lệnh cho Docker Postgres

CHỈNH SỬA - kể từ ngày 23 tháng 7 năm 2015

Hình ảnh docker postgres chính thức sẽ chạy .sql tập lệnh được tìm thấy trong /docker-entrypoint-initdb.d/ thư mục.

Vì vậy, tất cả những gì bạn cần là tạo tập lệnh sql sau:

init.sql

CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;

và thêm nó vào Dockerfile của bạn:

Dockerfile

FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/

Nhưng kể từ ngày 8 tháng 7 năm 2015, nếu tất cả những gì bạn cần là tạo người dùng và cơ sở dữ liệu , sẽ dễ dàng hơn nếu chỉ sử dụng POSTGRES_USER , POSTGRES_PASSWORDPOSTGRES_DB biến môi trường:

docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres

hoặc với Dockerfile:

FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker

cho những hình ảnh cũ hơn ngày 23 tháng 7 năm 2015

Từ tài liệu của hình ảnh Docker postgres, người ta nói rằng

[...] nó sẽ tạo nguồn bất kỳ tập lệnh * .sh nào được tìm thấy trong thư mục đó [/docker-entrypoint-initdb.d ] để khởi tạo thêm trước khi bắt đầu dịch vụ

Điều quan trọng ở đây là "trước khi bắt đầu dịch vụ" . Điều này có nghĩa là tập lệnh của bạn make_db.sh sẽ được thực thi trước khi dịch vụ postgres được bắt đầu, do đó, thông báo lỗi "không thể kết nối với cơ sở dữ liệu postgres" .

Sau đó là một thông tin hữu ích khác:

Nếu bạn cần thực thi các lệnh SQL như một phần trong quá trình khởi tạo của mình, thì việc sử dụng chế độ người dùng đơn Postgres rất được khuyến khích.

Đồng ý rằng điều này có thể hơi bí ẩn ở cái nhìn đầu tiên. Những gì nó nói là tập lệnh khởi tạo của bạn nên khởi động dịch vụ postgres ở chế độ duy nhất trước khi thực hiện các hành động của nó. Vì vậy, bạn có thể thay đổi make_db.ksh của mình script như sau và nó sẽ đưa bạn đến gần hơn với những gì bạn muốn:

LƯU Ý , điều này đã thay đổi gần đây trong cam kết sau. Điều này sẽ hoạt động với thay đổi mới nhất:

export PGUSER=postgres
psql <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL

Trước đây, việc sử dụng --single chế độ được yêu cầu:

gosu postgres postgres --single <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tìm thấy điểm nhập có tên 'InterlockedIncrement' trong DLL 'kernel32.dll' - [email protected] 64 bit

  2. Vị trí mặc định của cơ sở dữ liệu PostgreSQL trên Linux

  3. Tính số sự kiện đồng thời trong SQL

  4. Hàm Escape cho biểu thức chính quy hoặc các mẫu LIKE

  5. Sử dụng một khoảng thời gian thay đổi trong một khoảng thời gian trong Postgres