This commit is contained in:
Pierre HUBERT 2024-12-06 11:32:50 +01:00
parent deef51e042
commit 2ded4f6ed9
3 changed files with 55 additions and 3 deletions

View File

@ -14,6 +14,23 @@ RUN tar -xf pg16.tar.gz
RUN cd postgresql* && ./configure --prefix=/postgres/16 && make world-bin && make install RUN cd postgresql* && ./configure --prefix=/postgres/16 && make world-bin && make install
FROM ubuntu:noble FROM ubuntu:noble
RUN apt update && apt install -y libicu74 libreadline8t64 curl wget nano && rm -rf /var/lib/apt/lists/* RUN apt update && apt install -y \
libicu74 \
libreadline8t64 \
curl \
wget \
nano \
locales \
&& rm -rf /var/lib/apt/lists/*
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG=en_US.utf8
ENV POSTGRES_USER=postgres
COPY --from=build17 /postgres/17 /postgres/17 COPY --from=build17 /postgres/17 /postgres/17
COPY --from=build16 /postgres/16 /postgres/16 COPY --from=build16 /postgres/16 /postgres/16
COPY migrate.sh /migrate.sh
RUN chmod +x migrate.sh
CMD ["/migrate.sh"]

View File

@ -1,6 +1,13 @@
# Docker migration helper # Docker migration helper
## Test ## Test
Create an outdated database
```bash
mkdir test-db
docker run --rm --name testdb -u 1000 -e POSTGRES_PASSWORD=password -v $(pwd)/test-db:/var/lib/postgresql/data -it postgres:16
``` ```
docker run --rm --name testdb -e POSTGRES_PASSWORD=password -v $(pwd)/test-db:/var/lib/postgresql/data -it postgres:16
Perform the migration:
```bash
./build.sh && docker run -u 1000 -v $(pwd)/test-db:/db --rm -it pierre42100/postgresmig:16to17
``` ```

28
migrate.sh Normal file
View File

@ -0,0 +1,28 @@
#!/bin/bash
echo Migrate PostgreSQL version
DB_PATH=/db
OLD_DB_PATH=/tmp/old_db
# Run database on a COPY of the database
cp -r "$DB_PATH" "$OLD_DB_PATH"
# Start the database in the background
/postgres/16/bin/postgres -D /tmp/old_db/ &
while true;
do
echo Waiting for database...
if echo "\q" | /postgres/16/bin/psql -U "$POSTGRES_USER";
then
break
fi
done
# Perform dump
# Stop database
#pkill postgres
bash