PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak stworzyć użytkownika/bazę danych w skrypcie dla Docker Postgres

EDYTUJ - od 23 lipca 2015

Oficjalny obraz dokera postgres uruchomi .sql skrypty znalezione w /docker-entrypoint-initdb.d/ teczka.

Wszystko, czego potrzebujesz, to utworzenie następującego skryptu sql:

init.sql

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

i dodaj go w swoim Dockerfile:

Plik Dockera

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

Ale od 8 lipca 2015 r. jeśli potrzebujesz tylko utworzyć użytkownika i bazę danych , łatwiej jest po prostu skorzystać z POSTGRES_USER , POSTGRES_PASSWORD i POSTGRES_DB zmienne środowiskowe:

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

lub za pomocą pliku Dockerfile:

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

dla obrazów starszych niż 23 lipca 2015

Z dokumentacji obrazu postgres Docker wynika, że

[...] będzie źródłem dowolnego skryptu *.sh znalezionego w tym katalogu [/docker-entrypoint-initdb.d ], aby wykonać dalszą inicjalizację przed uruchomieniem usługi

Tutaj ważne jest „przed uruchomieniem usługi” . Oznacza to, że Twój skrypt make_db.sh zostanie wykonany przed uruchomieniem usługi postgres, stąd komunikat o błędzie "nie można połączyć się z bazą danych postgres" .

Potem jest jeszcze jedna przydatna informacja:

Jeśli musisz wykonać polecenia SQL w ramach inicjalizacji, wysoce zalecane jest użycie trybu pojedynczego użytkownika Postgres.

Zgadzam się, może to być nieco tajemnicze na pierwszy rzut oka. Mówi, że twój skrypt inicjujący powinien uruchomić usługę postgres w trybie pojedynczym przed wykonaniem swoich działań. Możesz więc zmienić plik make_db.ksh skrypt w następujący sposób i powinien przybliżyć Cię do tego, czego chcesz:

UWAGA , zmieniło się to ostatnio w następnym zatwierdzeniu. Będzie to działać z najnowszą zmianą:

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

Wcześniej użycie --single tryb był wymagany:

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. Przechowuj wynik zapytania w zmiennej używając w PL/pgSQL

  2. Czy nie używanie NULL w PostgreSQL nadal używa bitmapy NULL w nagłówku?

  3. W jaki sposób pgBouncer pomaga przyspieszyć działanie Django?

  4. postgresql zwraca 0, jeśli zwracana wartość ma wartość null

  5. Czy w Postgresie możesz ustawić domyślne formatowanie znacznika czasu, według sesji czy globalnie?