Skip to content

Commit

Permalink
Add support for locale and encoding, fix sclorg#406
Browse files Browse the repository at this point in the history
  • Loading branch information
mscherer committed Oct 5, 2023
1 parent 62a947e commit 868c3fa
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ FROM {{ spec.s2i_base }}
# * $POSTGRESQL_DATABASE - Name of the database to create
# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres'
# PostgreSQL administrative account
# * $POSTGRESQL_ENCODING - Database encoding. Default to UTF8
# * $POSTGRESQL_LOCALE - Database locale. Default to en_US

ENV POSTGRESQL_VERSION={{ spec.version }} \
{% if spec.prod != "rhel8" or spec.prod != "rhel9" or spec.version == "10" %}
Expand Down
2 changes: 2 additions & 0 deletions src/Dockerfile.fedora
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ FROM quay.io/fedora/s2i-core:38
# * $POSTGRESQL_DATABASE - Name of the database to create
# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres'
# PostgreSQL administrative account
# * $POSTGRESQL_ENCODING - Database encoding. Default to UTF8
# * $POSTGRESQL_LOCALE - Database locale. Default to en_US

ENV NAME=postgresql \
VERSION=0 \
Expand Down
16 changes: 14 additions & 2 deletions src/root/usr/share/container-scripts/postgresql/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,10 @@ initdb_wrapper ()
# Initialize the database cluster with utf8 support enabled by default.
# This might affect performance, see:
# http://www.postgresql.org/docs/{{ spec.version }}/static/locale.html
LANG=${LANG:-en_US.utf8} "$@"
ENCODING=${POSTGRESQL_ENCODING:-UTF8}
LOCALE=${POSTGRESQL_LOCALE:-en_US}
if [ ${LOCALE} == "C" ] ; then LANG=C; fi
LANG=${LANG:-$LOCALE.$ENCODING} "$@" -E $ENCODING
}

function initialize_database() {
Expand Down Expand Up @@ -235,7 +238,16 @@ EOF
function create_users() {
if [[ ",$postinitdb_actions," = *,simple_db,* ]]; then
createuser "$POSTGRESQL_USER"
createdb --owner="$POSTGRESQL_USER" "$POSTGRESQL_DATABASE"

EXTRA_ARGS=""
if [ -v POSTGRESQL_ENCODING ]; then
EXTRA_ARGS="$EXTRA_ARGS -E $POSTGRESQL_ENCODING"
fi
if [ -v POSTGRESQL_LOCALE ]; then
EXTRA_ARGS="$EXTRA_ARGS -l $POSTGRESQL_LOCALE"
fi

createdb $EXTRA_ARGS --owner="$POSTGRESQL_USER" "$POSTGRESQL_DATABASE"
fi

if [ -v POSTGRESQL_MASTER_USER ]; then
Expand Down
49 changes: 49 additions & 0 deletions test/run_test
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ run_upgrade_test
run_migration_test
run_pgaudit_test
run_logging_test
run_locales_test
"

test $# -eq 1 -a "${1-}" == --list && echo "$TEST_LIST" && exit 0
Expand Down Expand Up @@ -983,6 +984,54 @@ run_logging_test()
echo " Success!"
}

run_locales_test() {
local data_dir config_dir name=pg-test-locales-1
# create a dir for data
create_volume_dir
data_dir="${volume_dir}"

DOCKER_ARGS="-e POSTGRESQL_ADMIN_PASSWORD=Mellon
-e POSTGRESQL_LOCALE=en_GB
-e POSTGRESQL_ENCODING=ISO885915
-v ${data_dir}:/var/lib/pgsql/data:Z" create_container $name

wait_ready "$name"

# LATIN9 is a alias for ISO885915
docker exec -i $(get_cid "$name") bash -c "psql <<EOSQL
SHOW SERVER_ENCODING;
EOSQL" | grep LATIN9

docker exec -i $(get_cid "$name") bash -c "psql <<EOSQL
SHOW LC_COLLATE;
EOSQL" | grep -vi LC_COLLA | grep en_GB

docker stop "$(get_cid "$name")"

name=pg-test-locales-2
# create a dir for data
create_volume_dir
data_dir="${volume_dir}"

DOCKER_ARGS="-e POSTGRESQL_ADMIN_PASSWORD=Natoar23ae
-e POSTGRESQL_LOCALE=C
-e POSTGRESQL_ENCODING=UTF8
-v ${data_dir}:/var/lib/pgsql/data:Z" create_container $name

wait_ready "$name"

docker exec -i $(get_cid "$name") bash -c "psql <<EOSQL
SHOW SERVER_ENCODING;
EOSQL" | grep UTF8

docker exec -i $(get_cid "$name") bash -c "psql <<EOSQL
SHOW LC_COLLATE;
EOSQL" | grep -vi LC_COLLA | grep C

docker stop "$(get_cid "$name")"

}

# configuration defaults
POSTGRESQL_MAX_CONNECTIONS=100
POSTGRESQL_MAX_PREPARED_TRANSACTIONS=0
Expand Down

0 comments on commit 868c3fa

Please sign in to comment.