74 lines
No EOL
2 KiB
Bash
74 lines
No EOL
2 KiB
Bash
#!/bin/sh
|
|
|
|
# Initialize and configure PostgreSQL database
|
|
#
|
|
# This script initializes a new PostgreSQL database if it doesn't exist,
|
|
# configures user authentication, and runs any initialization scripts.
|
|
#
|
|
# Environment variables:
|
|
# PGDATA: PostgreSQL data directory
|
|
# POSTGRES_USER: PostgreSQL user (default: postgres)
|
|
# POSTGRES_DB: Database name (default: same as POSTGRES_USER)
|
|
# POSTGRES_PASSWORD: User password (optional)
|
|
#
|
|
# Returns:
|
|
# None. Exits with status 0 on success, non-zero on failure.
|
|
|
|
chown -R postgres "$PGDATA"
|
|
|
|
if [ -z "$(ls -A "$PGDATA")" ]; then
|
|
su-exec postgres initdb
|
|
sed -ri "s/^#(listen_addresses\s*=\s*)\S+/\1'*'/" "$PGDATA"/postgresql.conf
|
|
|
|
: ${POSTGRES_USER:="postgres"}
|
|
: ${POSTGRES_DB:=$POSTGRES_USER}
|
|
|
|
if [ "$POSTGRES_PASSWORD" ]; then
|
|
pass="PASSWORD '$POSTGRES_PASSWORD'"
|
|
authMethod=md5
|
|
else
|
|
echo "==============================="
|
|
echo "!!! NO PASSWORD SET !!! (Use \$POSTGRES_PASSWORD env var)"
|
|
echo "==============================="
|
|
pass=
|
|
authMethod=trust
|
|
fi
|
|
echo
|
|
|
|
|
|
if [ "$POSTGRES_DB" != 'postgres' ]; then
|
|
createSql="CREATE DATABASE $POSTGRES_DB;"
|
|
echo $createSql | su-exec postgres postgres --single -jE
|
|
echo
|
|
fi
|
|
|
|
if [ "$POSTGRES_USER" != 'postgres' ]; then
|
|
op=CREATE
|
|
else
|
|
op=ALTER
|
|
fi
|
|
|
|
userSql="$op USER $POSTGRES_USER WITH SUPERUSER $pass;"
|
|
echo $userSql | su-exec postgres postgres --single -jE
|
|
echo
|
|
|
|
su-exec postgres pg_ctl -D "$PGDATA" \
|
|
-o "-c listen_addresses=''" \
|
|
-w start
|
|
|
|
echo
|
|
for f in /docker-entrypoint-initdb.d/*; do
|
|
case "$f" in
|
|
*.sh) echo "$0: running $f"; . "$f" ;;
|
|
*.sql) echo "$0: running $f"; psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < "$f" && echo ;;
|
|
*) echo "$0: ignoring $f" ;;
|
|
esac
|
|
echo
|
|
done
|
|
|
|
su-exec postgres pg_ctl -D "$PGDATA" -m fast -w stop
|
|
|
|
{ echo; echo "host all all 0.0.0.0/0 $authMethod"; } >> "$PGDATA"/pg_hba.conf
|
|
fi
|
|
|
|
exec su-exec postgres "$@" |