|
3 | 3 | # THIS FILE IS FOR MIGRATION OF EXISTING DB TO TIMESCALEDB IMAGE AS TIMESCALE INIT SCRIPTS AREN'T RUN WHEN DB |
4 | 4 | # ALREADY EXISTS; IT ALSO DOES AN AUTOMATIC REINDEX OF THE DB WHEN OR_REINDEX_COUNTER CHANGES TO SIMPLIFY MIGRATIONS |
5 | 5 | # IT ALSO AUTOMATICALLY HANDLES UPGRADING OF DATABASE AND DURING MAJOR VERSION CHANGES |
| 6 | +# BASED ON: https://github.com/pgautoupgrade/docker-pgautoupgrade |
6 | 7 |
|
7 | 8 | source /docker-entrypoint.sh |
8 | 9 | docker_setup_env |
@@ -150,13 +151,39 @@ if [ -n "$DATABASE_ALREADY_EXISTS" ]; then |
150 | 151 | # Return the error handling back to automatically aborting on non-0 exit status |
151 | 152 | set -e |
152 | 153 |
|
| 154 | + # If no initdb arguments were passed to us from the environment, then work out something valid ourselves |
| 155 | + if [ "x${POSTGRES_INITDB_ARGS}" != "x" ]; then |
| 156 | + echo "------------------------------------------------------------------------------" |
| 157 | + echo "Using initdb arguments passed in from the environment: ${POSTGRES_INITDB_ARGS}" |
| 158 | + echo "------------------------------------------------------------------------------" |
| 159 | + else |
| 160 | + echo "-------------------------------------------------" |
| 161 | + echo "Remove postmaster.pid file from PG data directory" |
| 162 | + echo "-------------------------------------------------" |
| 163 | + rm -f "${OLD}"/postmaster.pid |
| 164 | + |
| 165 | + echo "------------------------------------" |
| 166 | + echo "Determining our own initdb arguments" |
| 167 | + echo "------------------------------------" |
| 168 | + COLLATE=unset |
| 169 | + CTYPE=unset |
| 170 | + ENCODING=unset |
| 171 | + COLLATE=$(echo 'SHOW LC_COLLATE' | "/usr/lib/postgresql/${DB_VERSION}/bin/postgres" --single -D "${OLD}" "${POSTGRES_DB}" | grep 'lc_collate = "' | cut -d '"' -f 2) |
| 172 | + CTYPE=$(echo 'SHOW LC_CTYPE' | "/usr/lib/postgresql/${DB_VERSION}/bin/postgres" --single -D "${OLD}" "${POSTGRES_DB}" | grep 'lc_ctype = "' | cut -d '"' -f 2) |
| 173 | + ENCODING=$(echo 'SHOW SERVER_ENCODING' | "/usr/lib/postgresql/${DB_VERSION}/bin/postgres" --single -D "${OLD}" "${POSTGRES_DB}" | grep 'server_encoding = "' | cut -d '"' -f 2) |
| 174 | + POSTGRES_INITDB_ARGS="--locale=${COLLATE} --lc-collate=${COLLATE} --lc-ctype=${CTYPE} --encoding=${ENCODING}" |
| 175 | + echo "---------------------------------------------------------------" |
| 176 | + echo "The initdb arguments we determined are: ${POSTGRES_INITDB_ARGS}" |
| 177 | + echo "---------------------------------------------------------------" |
| 178 | + fi |
| 179 | + |
153 | 180 | # Initialise the new PostgreSQL database directory |
154 | 181 | echo "--------------------------------------------------------------------------------------------------------------------" |
155 | | - echo "Initialising new database directory" |
| 182 | + echo "Old database using collation settings: '${POSTGRES_INITDB_ARGS}'. Initialising new database with those settings too" |
156 | 183 | echo "--------------------------------------------------------------------------------------------------------------------" |
157 | | - initdb -D $PGDATA/new |
| 184 | + initdb --username="${POSTGRES_USER}" ${POSTGRES_INITDB_ARGS} ${PGDATA}/new/ |
158 | 185 | echo "------------------------------------" |
159 | | - echo "New database directory initialisation complete" |
| 186 | + echo "New database initialisation complete" |
160 | 187 | echo "------------------------------------" |
161 | 188 |
|
162 | 189 | # Change into the PostgreSQL database directory, to avoid a pg_upgrade error about write permissions |
|
0 commit comments