@@ -41,14 +41,28 @@ if [ "$1" = 'postgres' ]; then
41
41
file_env ' POSTGRES_INITDB_ARGS'
42
42
eval " gosu postgres initdb $POSTGRES_INITDB_ARGS "
43
43
44
+ authMethod=trust
45
+ if [ " $POSTGRES_USERS " ]; then
46
+ USERS_ARR=$( echo $POSTGRES_USERS | tr " |" " \n" )
47
+ for USER in $USERS_ARR
48
+ do
49
+ USER_PASSWORD=` echo $USER | cut -d: -f2`
50
+ if [ " $USER_PASSWORD " ]; then
51
+ authMethod=md5
52
+ done
53
+ fi
54
+
44
55
# check password first so we can output the warning before postgres
45
56
# messes it up
46
57
file_env ' POSTGRES_PASSWORD'
47
58
if [ " $POSTGRES_PASSWORD " ]; then
48
59
pass=" PASSWORD '$POSTGRES_PASSWORD '"
49
60
authMethod=md5
50
61
else
51
- # The - option suppresses leading tabs but *not* spaces. :)
62
+ pass=
63
+ fi
64
+
65
+ if [ " $authMethod " == " trust" ]; then
52
66
cat >&2 << -'EOWARN '
53
67
****************************************************
54
68
WARNING: No password has been set for the database.
@@ -62,9 +76,6 @@ if [ "$1" = 'postgres' ]; then
62
76
it in "docker run".
63
77
****************************************************
64
78
EOWARN
65
-
66
- pass=
67
- authMethod=trust
68
79
fi
69
80
70
81
{ echo ; echo " host all all all $authMethod " ; } | gosu postgres tee -a " $PGDATA /pg_hba.conf" > /dev/null
@@ -99,6 +110,63 @@ if [ "$1" = 'postgres' ]; then
99
110
100
111
psql+=( --username " $POSTGRES_USER " --dbname " $POSTGRES_DB " )
101
112
113
+ # If you want to create more than one user, please use that variable
114
+ # Variable example: POSTGRES_USER="user1:user1pass|user2:user2pass|user3:user3password"
115
+ if [ " $POSTGRES_USERS " ]; then
116
+ USERS_ARR=$( echo $POSTGRES_USERS | tr " |" " \n" )
117
+ for USER in $USERS_ARR
118
+ do
119
+ USER_NAME=` echo $USER | cut -d: -f1`
120
+ USER_PASSWORD=` echo $USER | cut -d: -f2`
121
+ if [ " $USER_NAME " = ' postgres' ]; then
122
+ op=' ALTER'
123
+ else
124
+ op=' CREATE'
125
+ fi
126
+ " ${psql[@]} " --username postgres << -EOSQL
127
+ $op USER "$USER_NAME " WITH SUPERUSER PASSWORD $USER_PASSWORD ;
128
+ EOSQL
129
+ done
130
+ fi
131
+
132
+ # If you want to create more than one database, please use that variable
133
+ # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3"
134
+ if [ " $POSTGRES_DATABASES " ]; then
135
+ DATABASES_ARR=$( echo $POSTGRES_DATABASES | tr " |" " \n" )
136
+ for DATABASE in $DATABASES_ARR
137
+ do
138
+ DATABASE_NAME=` echo $DATABASE | cut -d: -f1`
139
+ DATABASE_OWNER=` echo $DATABASE | cut -d: -f2`
140
+ if [ " $DATABASE_NAME " != ' postgres' ]; then
141
+ if [ " $DATABASE_OWNER " ]; then
142
+ " ${psql[@]} " --username postgres << -EOSQL
143
+ CREATE DATABASE "$DATABASE_NAME owner $DATABASE_OWNER " ;
144
+ EOSQL
145
+ echo
146
+ else
147
+ " ${psql[@]} " --username postgres << -EOSQL
148
+ CREATE DATABASE "$DATABASE_NAME " ;
149
+ EOSQL
150
+ echo
151
+ fi
152
+ fi
153
+ done
154
+ fi
155
+
156
+ # If you want to set up initial postgresql.conf parameters, please use that variable
157
+ # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off"
158
+ if [ " $POSTGRES_CONFIGS " ]; then
159
+ CONFIGS_ARR=$( echo $POSTGRES_CONFIGS | tr " |" " \n" )
160
+ for CONFIG in $CONFIGS_ARR
161
+ do
162
+ CONFIG_NAME=` echo $CONFIG | cut -d: -f1`
163
+ CONFIG_VALUE=` echo $CONFIG | cut -d: -f2`
164
+ " ${psql[@]} " --username postgres << -EOSQL
165
+ ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE " ;
166
+ EOSQL
167
+ done
168
+ fi
169
+
102
170
echo
103
171
for f in /docker-entrypoint-initdb.d/* ; do
104
172
case " $f " in
0 commit comments