====== PostgreSQL ======
===== DEV refresh =====
==== Backup fuelwatcher on PROD ====
docker exec -it FT_PostgreSQL /bin/bash
cd /var/lib/postgresql/data/backups/
pg_dump -d fuelwatcher > fuelwatcher_RPi64_`date +%Y-%m-%dT%H-%M-%S`.backup
Login to root:
sudo su -
rsync -av /var/lib/docker/volumes/fueltracker_postgres-data/_data/backups/ /media/usb/backup/postgresql/backups/
==== Restore on DEV ====
Copy //daily// backup from PROD to DEV using Beyond Compare config **Docker/backups (WSL <--> KARGATH)**
Login:
docker exec -it FT_PostgreSQL /bin/bash
su - postgres
psql
DROP and CREATE DATABASE
select pg_terminate_backend(pid) from pg_stat_activity where datname='fuelwatcher';
DROP DATABASE fuelwatcher;
CREATE DATABASE fueltracker
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
Backup DEV then Restore PROD to DEV:
cd /var/lib/postgresql/data/backups/
pg_dump -d fueltracker > fueltracker_FALKREATH_`date +%Y-%m-%dT%H-%M-%S`.backup
psql -d fuelwatcher < fueltracker_RPi64_2021-08-01T05-23-25.backup
TMP
pg_dumpall > dev-container_devcontainer_db_1_all_`date +%Y-%m-%dT%H-%M-%S`.backup
cd /workspace/FuelTracker/data/STONARD\ backups/
cd /workspace/FuelTracker/data/RPi-WiFi\ backups/
===== Data Dictionary export =====
For comparison between PROD and DEV. Perform on both:
pg_dump -Cs fueltracker > /workspace/FuelTracker/backups/fueltracker_FALKREATH_`date +%Y-%m-%dT%H-%M-%S`.bak
===== Version upgrade =====
Test (gunzipped) restore of daily PROD backup to test PostgreSQL server (new version).
docker exec -it TEST_PostgreSQL /bin/bash
cd /var/lib/postgresql/data/backups/
psql -U postgres -f FW_PostgreSQL_all_2023-11-28T00-00-01.bak
Stop both PostgreSQL servers.
Move PROD directory aside and clone test data files into place (perms are important).
mv _data data_bak
rsync -av ../postgresql-test_test-postgres-data/_data .
Move backups back to proper location
mv data_bak/backups/* _data/backups/
===== Password fix =====
SELECT
rolname, rolpassword ~ '^SCRAM-SHA-256\$' AS has_upgraded
FROM pg_authid
WHERE rolcanlogin;
\password postgres
===== References =====
[[https://www.postgresqltutorial.com/postgresql-administration/postgresql-restore-database/|PostgreSQL Restore Database]]
[[https://blog.crunchydata.com/blog/how-to-upgrade-postgresql-passwords-to-scram|How to Upgrade Your PostgreSQL Passwords to SCRAM ]]
[[https://www.chrisnewland.com/postgres-dump-database-schema-with-or-without-data-61|Postgres dump database schema with or without data]]
[[https://www.commandprompt.com/education/postgresql-basic-psql-commands/|PostgreSQL: Basic psql Commands]]
[[https://www.kostolansky.sk/posts/upgrading-to-postgresql-15/|How to upgrade PostgreSQL from 14 to 15]]