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 Mar 15, 2023
1 parent baea0ee commit b8af762
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/root/usr/share/container-scripts/postgresql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ initialization by passing `-e VAR=VALUE` to the Docker run command.
**`POSTGRESQL_ADMIN_PASSWORD`**
Password for the `postgres` admin account (optional)

The following environment variables are optional, and only used when the database is initialzed

**`POSTGRESQL_ENCODING`**
Database encoding. Default to UTF8

**`POSTGRESQL_LOCALE`**
Database locale. Default to en_US

Alternatively, the following options are related to migration scenario:

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 @@ -190,7 +190,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 @@ -223,7 +226,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_s2i_enable_ssl_test
run_upgrade_test
run_migration_test
run_pgaudit_test
run_locales_test
"

test $# -eq 1 -a "${1-}" == --list && echo "$TEST_LIST" && exit 0
Expand Down Expand Up @@ -938,6 +939,54 @@ EOSQL" || ret=3
return $ret
}

function 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 b8af762

Please sign in to comment.