docker-pgautoupgrade: ERROR: You must have read and write access in the current directory

When trying to move from postgres 14.7-alpine to pgautoupgrade/pgautoupgrade 15-alpine3.8, I keep getting the error You must have read and write access in the current directory.

Log Output:

Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: mv: can't rename '/var/lib/postgresql/data/old': Invalid argument
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/PG_VERSION' -> '/var/lib/postgresql/data/old/PG_VERSION'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/base' -> '/var/lib/postgresql/data/old/base'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/core' -> '/var/lib/postgresql/data/old/core'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/global' -> '/var/lib/postgresql/data/old/global'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/old' -> '/var/lib/postgresql/data/old/old'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_commit_ts' -> '/var/lib/postgresql/data/old/pg_commit_ts'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_dynshmem' -> '/var/lib/postgresql/data/old/pg_dynshmem'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_hba.conf' -> '/var/lib/postgresql/data/old/pg_hba.conf'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_ident.conf' -> '/var/lib/postgresql/data/old/pg_ident.conf'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_logical' -> '/var/lib/postgresql/data/old/pg_logical'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_multixact' -> '/var/lib/postgresql/data/old/pg_multixact'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_notify' -> '/var/lib/postgresql/data/old/pg_notify'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_replslot' -> '/var/lib/postgresql/data/old/pg_replslot'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_serial' -> '/var/lib/postgresql/data/old/pg_serial'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_snapshots' -> '/var/lib/postgresql/data/old/pg_snapshots'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_stat' -> '/var/lib/postgresql/data/old/pg_stat'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_stat_tmp' -> '/var/lib/postgresql/data/old/pg_stat_tmp'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_subtrans' -> '/var/lib/postgresql/data/old/pg_subtrans'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_tblspc' -> '/var/lib/postgresql/data/old/pg_tblspc'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_twophase' -> '/var/lib/postgresql/data/old/pg_twophase'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_wal' -> '/var/lib/postgresql/data/old/pg_wal'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/pg_xact' -> '/var/lib/postgresql/data/old/pg_xact'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/postgresql.auto.conf' -> '/var/lib/postgresql/data/old/postgresql.auto.conf'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/postgresql.conf' -> '/var/lib/postgresql/data/old/postgresql.conf'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: '/var/lib/postgresql/data/postmaster.opts' -> '/var/lib/postgresql/data/old/postmaster.opts'
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: PostgreSQL 14 database files found, upgrading to PostgreSQL 15
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: Initialising PostgreSQL 15 data directory
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: The files belonging to this database system will be owned by user "matrix".
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: This user must also own the server process.
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: The database cluster will be initialized with locale "C".
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: The default database encoding has accordingly been set to "SQL_ASCII".
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: The default text search configuration will be set to "english".
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: Data page checksums are disabled.
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: fixing permissions on existing directory /var/lib/postgresql/data/new ... ok
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: creating subdirectories ... ok
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: selecting dynamic shared memory implementation ... posix
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: selecting default max_connections ... 100
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: selecting default shared_buffers ... 128MB
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: selecting default time zone ... UTC
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: creating configuration files ... ok
Aug 17 21:33:50 matrix.linuxdelta.com matrix-postgres[281930]: running bootstrap script ... ok
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: performing post-bootstrap initialization ... ok
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: syncing data to disk ... ok
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: Success. You can now start the database server using:
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]:     /usr/local/bin/pg_ctl -D /var/lib/postgresql/data/new/ -l logfile start
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: initdb: warning: enabling "trust" authentication for local connections
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: You must have read and write access in the current directory.
Aug 17 21:33:51 matrix.linuxdelta.com matrix-postgres[281930]: Failure, exiting
Aug 17 21:33:51 matrix.linuxdelta.com systemd[1]: matrix-postgres.service: Main process exited, code=exited, status=1/FAILURE
Aug 17 21:33:51 matrix.linuxdelta.com systemd[1]: matrix-postgres.service: Failed with result 'exit-code'.
Aug 17 21:33:55 matrix.linuxdelta.com systemd[1]: Stopped Postgres server (matrix-postgres).

docker run command:

/usr/bin/env docker run \
                        --rm \
                        --name matrix-postgres \
                        --log-driver=none \
                        --user=1000:1000 \
                        --cap-drop=ALL \
                        --read-only \
                        --tmpfs=/tmp:rw,noexec,nosuid,size=100m \
                        --tmpfs=/run/postgresql:rw,noexec,nosuid,size=100m \
                        --shm-size=256m \
                        --network=matrix \
                        --env-file=/matrix/postgres/env-postgres-server \
                        --mount type=bind,src=/matrix/postgres/data,dst=/var/lib/postgresql/data \
                        --mount type=bind,src=/etc/passwd,dst=/etc/passwd,ro \
                        docker.io/pgautoupgrade/pgautoupgrade:15-alpine3.8 \
                        postgres -c max_connections=200 -c shared_buffers=4GB -c effective_cache_size=12GB -c maintenance_work_mem=1GB -c checkpoint_completion_target=0.9 -c wal_buffers=16MB -c default_statistics_target=100 -c random_page_cost=1.1 -c effective_io_concurrency=200 -c work_mem=5242kB -c min_wal_size=1GB -c max_wal_size=4GB -c max_worker_processes=8 -c max_parallel_workers_per_gather=4 -c max_parallel_workers=8 -c max_parallel_maintenance_workers=4

Docker Environment File:

POSTGRES_USER=matrix
POSTGRES_PASSWORD=
POSTGRES_DB=matrix
POSTGRES_INITDB_ARGS=--lc-collate C --lc-ctype C --encoding UTF8

About this issue

  • Original URL
  • State: open
  • Created 10 months ago
  • Comments: 19 (13 by maintainers)

Most upvoted comments

Started systemd service at Aug 21 22:14:47 Server started and listening at Aug 21 22:15:06

This time it did the upgrade and started the database server successfully. Going to do some further tests to ensure that the matrix server continues to function but what I have seen so far this is a much faster upgrade path than exporting the data and then reporting which took like 2 days.

Thanks. I’m adjusting things with the extra logging at the moment. Need to run the test harness against that (shortly), so probably have something you can try in about 20-30 mins. šŸ˜„

Yes this is for a Matrix server that we run for our community. It is setup and configured using this ansible playbook (https://github.com/spantaleev/matrix-docker-ansible-deploy). We need to upgrade the postgres database from 14 to 15 and the documentation is to export the database and then re-import which with a database that is 300 to 400 GB takes a long time so we are looking for a better way to upgrade the database.