Sto cercando di creare un Dockerfile dall'immagine postgres. Il repository dice che l'inizializzazione dovrebbe essere gestita inserendo uno script di shell in /docker-entrypoint-initdb.d/. Ho messo il seguente script sulla base di un esempio che ho trovato on-line:Creazione di una tabella in modalità utente singolo in postgres
#!/bin/bash
echo "******CREATING DOCKER DATABASE******"
gosu postgres postgres --single <<- EOSQL
CREATE DATABASE orpheus;
CREATE USER docker WITH ENCRYPTED PASSWORD 'pwd_docker';
GRANT ALL PRIVILEGES ON DATABASE orpheus to docker;
CREATE TABLE profiles (\
profile_id SERIAL UNIQUE PRIMARY KEY, \
user_id integer NOT NULL UNIQUE, \
profile_photo_id integer NOT NULL UNIQUE, \
age integer \
);
CREATE TABLE hidden_user (\
owner_id integer NOT NULL PRIMARY KEY, \
target_id integer NOT NULL \
);
EOSQL
echo ""
echo "******DOCKER DATABASE CREATED******"
I backslash sembrano necessari perché altrimenti ottengo un errore di analisi. Lo script viene eseguito senza errori e tutti i comandi tranne i comandi CREATE TABLE sembrano avere avuto un effetto.
È che la creazione di tabelle non è supportata in modalità utente singolo? Se è così, c'è un modo migliore per avere un file docker di creare un'immagine con tabelle create in postgres?
modalità utente singolo non è destinato ad altro che il ripristino di emergenza: http://postgresql.nabble.com/BUG-12670-Can-t-create-postgis-extension-in- single-user-mode-tp5835585p5835592.html La domanda è: perché si avvia Postgres in modalità utente singolo? –
Si consiglia nel repository ufficiale docker per postgres. "Se è necessario eseguire comandi SQL come parte dell'inizializzazione, si consiglia vivamente l'uso della modalità utente singolo Postgres." - https://registry.hub.docker.com/_/postgres/ – sdab
Questo è chiaramente un cattivo consiglio –