sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořit uživatele/databázi ve skriptu pro Docker Postgres

EDIT – od 23. července 2015

Oficiální postgres docker image poběží .sql skripty nalezené v /docker-entrypoint-initdb.d/ složka.

Vše, co potřebujete, je vytvořit následující skript SQL:

init.sql

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

a přidejte jej do svého Dockerfile:

Dockerfile

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

Ale od 8. července 2015 pokud vše, co potřebujete, je vytvořit uživatele a databázi , je jednodušší jednoduše použít POSTGRES_USER , POSTGRES_PASSWORD a POSTGRES_DB proměnné prostředí:

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

nebo pomocí Dockerfile:

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

pro obrázky starší než 23. července 2015

Z dokumentace obrazu postgres Docker se říká, že

[...] bude zdrojovým kódem jakýkoli *.sh skript nalezený v tomto adresáři [/docker-entrypoint-initdb.d ] pro provedení další inicializace před spuštěním služby

Zde je důležité „před spuštěním služby“ . To znamená váš skript make_db.sh bude spuštěna před spuštěním služby postgres, proto se zobrazí chybová zpráva "nelze se připojit k databázi postgres" .

Poté je tu další užitečná informace:

Pokud potřebujete spouštět příkazy SQL jako součást inicializace, důrazně se doporučuje použít režim jednoho uživatele Postgres.

Souhlasím, že to může být na první pohled trochu záhadné. Říká se, že váš inicializační skript by měl spustit službu postgres v jediném režimu, než provede své akce. Můžete tedy změnit svůj make_db.ksh skript takto a měl by vás přiblížit tomu, co chcete:

POZNÁMKA , to se nedávno změnilo v následujícím potvrzení. Toto bude fungovat s nejnovější změnou:

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

Dříve se používal --single byl vyžadován režim:

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


  1. Jak změnit symbol měny relace v Oracle

  2. PostgreSQL výukový program pro začátečníky – vše, co potřebujete vědět o PostgreSQL

  3. Příklady SUBDATE() – MySQL

  4. Jak zobrazit všechna oprávnění od uživatele v oracle?