On 01/18 12:12, Florian Obser wrote:
> Hi there!
>
> when upgrading postgres from 17 -> 18, following the pkg readme "Option
> 2: pg_upgrade" one ends up here:
>
> ------------------------------------------------------------------------
> # su _postgresql -c "cd /var/postgresql && \
> > pg_upgrade -b /usr/local/bin/postgresql-17/ -B /usr/local/bin \
> > -U postgres -d /var/postgresql/data-17/ -D /var/postgresql/data"
> Performing Consistency Checks
> -----------------------------
> Checking cluster versions ok
>
> old cluster does not use data checksums but the new one does
> Failure, exiting
> ------------------------------------------------------------------------
>
> I found two ways around this.
>
> 1. use --no-data-checksums during upgrade
> -----------------------------------------
> su _postgresql -c "mkdir /var/postgresql/data && cd /var/postgresql && \
> initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 -W
> --no-data-checksums"
>
> 2. enable data checksums *before* the upgrade
> ---------------------------------------------
> rcctl stop postgresql
> su _postgresql -c '/usr/local/bin/pg_checksums -e -D /var/postgresql/data'
> rcctl start postgresql
>
>
> I suspect enabling data checksums is the preferred method as this seems
> to be the default now? I think we should update the pkg-readme and / or
> current.html.
Here's an update to the pkg-readme. OKs? This can be reverted when we
update to PostgreSQL 19, since the pg_upgrade we ship only supports
single version upgrades.
Best,
Jeremy
Index: pkg/README-server
===================================================================
RCS file: /cvs/ports/databases/postgresql/pkg/README-server,v
retrieving revision 1.38
diff -u -p -u -p -r1.38 README-server
--- pkg/README-server 6 Dec 2025 22:15:29 -0000 1.38
+++ pkg/README-server 21 Jan 2026 01:10:11 -0000
@@ -140,13 +140,17 @@ faster than a dump and reload, especiall
1) Shutdown the server:
# rcctl stop postgresql
-2) Upgrade your PostgreSQL package with pkg_add.
+2) Enable data checksums if not already enabled (data checksums were not
+ enabled by default until PostgreSQL 18):
+# su _postgresql -c '/usr/local/bin/pg_checksums -e -D /var/postgresql/data'
+
+3) Upgrade your PostgreSQL package with pkg_add.
# pkg_add postgresql-pg_upgrade
-3) Backup your old data directory:
+4) Backup your old data directory:
# mv /var/postgresql/data /var/postgresql/data-${PREV_MAJOR}
-4) Create a new data directory:
+5) Create a new data directory:
# su _postgresql -c "mkdir /var/postgresql/data && cd /var/postgresql && \
initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 -W"
@@ -154,11 +158,11 @@ faster than a dump and reload, especiall
in a UTF-8 locale; if that is the case and you require an ASCII database
environment, use "initdb --locale=C -D /var/postgresql/data [...]").
-5) Temporarily support connecting without a password for local users by
+6) Temporarily support connecting without a password for local users by
editing pg_hba.conf to include "local all postgres trust"
# vi /var/postgresql/data-${PREV_MAJOR}/pg_hba.conf
-6) Restore your old pg_hba.conf and (if used) SSL certificates
+7) Restore your old pg_hba.conf and (if used) SSL certificates
# cp -p /var/postgresql/data-${PREV_MAJOR}/pg_hba.conf /var/postgresql/data/
# cp -p /var/postgresql/data-${PREV_MAJOR}/server.{crt,key}
/var/postgresql/data/
@@ -170,15 +174,15 @@ identify them:
# diff -wu ${LOCALBASE}/share/postgresql-${PREV_MAJOR}/postgresql.conf.sample \
/var/postgresql/data-${PREV_MAJOR}/postgresql.conf
-7) Run pg_upgrade:
+8) Run pg_upgrade:
# su _postgresql -c "cd /var/postgresql && \
pg_upgrade -b /usr/local/bin/postgresql-${PREV_MAJOR}/ -B /usr/local/bin \
-U postgres -d /var/postgresql/data-${PREV_MAJOR}/ -D /var/postgresql/data"
-8) Remove "local all postgres trust" line from pg_hba.conf
+9) Remove "local all postgres trust" line from pg_hba.conf
# vi /var/postgresql/data/pg_hba.conf
-9) Start PostgreSQL:
+10) Start PostgreSQL:
# rcctl start postgresql
Clients/Frontends