sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan opretter du bruger/database i script til Docker Postgres

EDIT - siden 23. juli 2015

Det officielle postgres docker-billede vil køre .sql scripts fundet i /docker-entrypoint-initdb.d/ folder.

Så alt hvad du behøver er at oprette følgende sql-script:

init.sql

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

og tilføj det i din Dockerfile:

Dockerfil

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

Men siden den 8. juli 2015, hvis alt hvad du behøver er at oprette en bruger og database , er det nemmere bare at gøre brug af POSTGRES_USER , POSTGRES_PASSWORD og POSTGRES_DB miljøvariabler:

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

eller med en Dockerfile:

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

for billeder ældre end 23. juli 2015

Fra dokumentationen af ​​postgres Docker-billedet siges det, at

[...] den vil hente ethvert *.sh-script, der findes i den mappe [/docker-entrypoint-initdb.d ] for at udføre yderligere initialisering, før du starter tjenesten

Det, der er vigtigt her, er "før du starter tjenesten" . Dette betyder dit script make_db.sh vil blive udført før postgres-tjenesten ville blive startet, derfor fejlmeddelelsen "kunne ikke oprette forbindelse til databasen postgres" .

Derefter er der en anden nyttig information:

Hvis du har brug for at udføre SQL-kommandoer som en del af din initialisering, anbefales det stærkt at bruge Postgres enkeltbrugertilstand.

Enig, at dette kan være lidt mystisk ved første kig. Det, der står, er, at dit initialiseringsscript skal starte postgres-tjenesten i enkelttilstand, før du udfører sine handlinger. Så du kan ændre din make_db.ksh script som følger, og det skulle bringe dig tættere på det, du ønsker:

BEMÆRK , dette har ændret sig for nylig i følgende commit. Dette vil fungere med den seneste ændring:

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

Tidligere brugte --single tilstand var påkrævet:

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


  1. Find max værdi og vis tilsvarende værdi fra andet felt i SQL server

  2. Oracle Ace ændringer

  3. Få den mest almindelige værdi for hver værdi i en anden kolonne i SQL

  4. Sådan opretter du en ikke-nul kolonne i en visning