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

Как да създадете потребител/база данни в скрипт за Docker Postgres

РЕДАКТИРАНЕ - от 23 юли 2015 г.

Официалното postgres docker изображение ще изпълнява .sql скриптове, намерени в /docker-entrypoint-initdb.d/ папка.

Така че всичко, от което се нуждаете, е да създадете следния sql скрипт:

init.sql

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

и го добавете във вашия Dockerfile:

Dockerfile

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

Но от 8 юли 2015 г., ако всичко, от което се нуждаете, е да създадете потребител и база данни , по-лесно е просто да използвате POSTGRES_USER , POSTGRES_PASSWORD и POSTGRES_DB променливи на средата:

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

или с Dockerfile:

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

за изображения, по-стари от 23 юли 2015 г.

От документацията на изображението на postgres Docker се казва, че

[...] той ще източник на всеки *.sh скрипт, намерен в тази директория [/docker-entrypoint-initdb.d ], за да направите допълнителна инициализация преди стартиране на услугата

Това, което е важно тук, е „преди стартиране на услугата“ . Това означава вашият скрипт make_db.sh ще се изпълни преди услугата postgres да бъде стартирана, следователно съобщението за грешка „не може да се свърже с базата данни postgres“ .

След това има още една полезна информация:

Ако трябва да изпълнявате SQL команди като част от вашата инициализация, силно се препоръчва използването на режим за един потребител на Postgres.

Съгласен съм, че това може да бъде малко мистериозно на пръв поглед. Това, което казва, е, че вашият скрипт за инициализация трябва да стартира услугата postgres в единичен режим, преди да извърши своите действия. Така че можете да промените своя make_db.ksh скрипт, както следва и той трябва да ви доближи до това, което искате:

ЗАБЕЛЕЖКА , това се промени наскоро в следния комит. Това ще работи с последната промяна:

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

Преди това, използването на --single беше необходим режим:

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. АКТУАЛИЗИРАНЕ с ORDER BY

  2. трябва ли да активирам обединяването на изрази c3p0?

  3. Автоматично тестване на процеса на надстройка за PostgreSQL

  4. Прозоречна функция на Postgres и групиране по изключение

  5. Как да изберете повече от 1 запис на ден?