sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een gebruiker/database in script voor Docker Postgres

BEWERKEN - sinds 23 juli 2015

De officiële postgres docker-afbeelding zal .sql uitvoeren scripts gevonden in de /docker-entrypoint-initdb.d/ map.

U hoeft dus alleen het volgende sql-script te maken:

init.sql

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

en voeg het toe aan je Docker-bestand:

Dockerbestand

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

Maar sinds 8 juli 2015, als je alleen nog maar een gebruiker en database hoeft aan te maken , is het gemakkelijker om gewoon gebruik te maken van de POSTGRES_USER , POSTGRES_PASSWORD en POSTGRES_DB omgevingsvariabelen:

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

of met een Dockerfile:

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

voor afbeeldingen ouder dan 23 juli 2015

Uit de documentatie van de postgres Docker-afbeelding wordt gezegd dat

[...] het zal elk *.sh-script dat in die map wordt gevonden [/docker-entrypoint-initdb.d ] om verdere initialisatie uit te voeren voordat de service wordt gestart

Wat hier belangrijk is, is "voordat de service wordt gestart" . Dit betekent dat uw script make_db.sh wordt uitgevoerd voordat de postgres-service zou worden gestart, vandaar de foutmelding "kon geen verbinding maken met database postgres" .

Daarna is er nog een ander nuttig stukje informatie:

Als u SQL-opdrachten moet uitvoeren als onderdeel van uw initialisatie, wordt het gebruik van de modus voor één gebruiker van Postgres ten zeerste aanbevolen.

Akkoord, dit kan op het eerste gezicht een beetje mysterieus zijn. Wat er staat, is dat je initialisatiescript de postgres-service in enkele modus moet starten voordat het zijn acties uitvoert. U kunt dus uw make_db.ksh . wijzigen script als volgt en het zou je dichter moeten brengen bij wat je wilt:

OPMERKING , dit is onlangs veranderd in de volgende commit. Dit werkt met de laatste wijziging:

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

Voorheen was het gebruik van --single modus was vereist:

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


  1. SQL Server - NULL opnemen met UNPIVOT

  2. De waarde van gegevens in de loop van de tijd

  3. Optionele parameters schrijven binnen opgeslagen procedures in MySQL?

  4. Common Sense-licentiewijzigingen voor SQL Server 2014 Standard Edition