← Tilbake til dokumentasjon
Middels

Installer PostgreSQL og test backup og restore

Installer PostgreSQL på Ubuntu 26.04, begrens tilgangen, opprett en appdatabase og test en pg_dump-backup med restore.

postgresqldatabasebackuprestoresecurity

Denne guiden installerer PostgreSQL fra Ubuntu 26.04-pakkene og lar databasen lytte lokalt. Deretter oppretter du en role for appen og tester at en logisk backup kan restores til en separat database.

Før du starter

  • En Ubuntu 26.04-VPS med en vanlig bruker som har sudo
  • Sikkerhetsoppsettet for VPS
  • Nok ledig disk til databasen, temp-filer og minst én backup

Installer og sjekk PostgreSQL

sudo apt update
sudo apt install postgresql
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager
sudo -u postgres psql -c 'SELECT version();'
sudo -u postgres psql -c 'SHOW listen_addresses;'
sudo ss -lntp | grep 5432

Hvis appen kjører på samme VPS, lar du listen_addresses stå på loopback. Ikke åpne port 5432 offentlig i UFW.

Opprett role og database

Åpne PostgreSQL som administrator:

sudo -u postgres psql

Opprett en login role og database. Sett passordet interaktivt slik at det ikke havner i shell history:

CREATE ROLE example_app LOGIN;
CREATE DATABASE example OWNER example_app;
\password example_app
\q

Legg connection string i appens beskyttede environment-fil. Test tilkoblingen og at rollen kan opprette, skrive, lese og fjerne et midlertidig objekt:

psql 'postgresql://example_app@127.0.0.1/example' --set ON_ERROR_STOP=1 --command "CREATE TEMP TABLE permission_check (value text); INSERT INTO permission_check VALUES ('ok'); TABLE permission_check; DROP TABLE permission_check;"

Klienten spør etter passordet og skal skrive ut ok. Temp-tabellen forsvinner med sessionen og endrer ikke appdata. For automatiserte jobber bruker du en .pgpass-fil med modus 600 i stedet for å skrive passordet i kommandoen.

Opprett en kjent testrecord

sudo -u postgres psql example
CREATE TABLE restore_check (id integer PRIMARY KEY, value text NOT NULL);
INSERT INTO restore_check VALUES (1, 'backup-test');
\q

Ta backup og test restore

sudo install -d -o postgres -g postgres -m 0700 /var/backups/postgresql
sudo -u postgres pg_dump --format=custom --file=/var/backups/postgresql/example.dump example
sudo -u postgres pg_restore --list /var/backups/postgresql/example.dump | head

Restore til en ny database. --no-owner gjør testen uavhengig av metadata om eieren i kildedatabasen, mens --role=example_app gir app-rollen eierskap til objektene.

sudo -u postgres createdb --owner=example_app example_restore_test
sudo -u postgres pg_restore --exit-on-error --no-owner --role=example_app --dbname=example_restore_test /var/backups/postgresql/example.dump
sudo -u postgres psql example_restore_test -c 'TABLE restore_check;'

Resultatet skal inneholde 1 | backup-test. Slett testdatabasen etterpå:

sudo -u postgres dropdb example_restore_test

Kopier backups til separat storage, krypter dem, sett retention og monitorer både backup-jobber og faste restore-tester. Exit code 0 fra pg_dump beviser ikke alene at restore fungerer.

Monitoring og vedlikehold

  • Varsle om lite ledig disk før PostgreSQL eller operativsystemet går tomt.
  • Monitorer databasestørrelse, connections, trege queries, feilede backups og autovacuum.
  • Les release notes før minor og major upgrades.
  • Test major upgrades og app-rollback i staging.

Se databaser på VPS for dimensjonering og valg mellom egen drift og en administrert database.

Kilder: PostgreSQL client authentication, pg_dump og pg_restore.