PostgreSQL-17.1

Introduksjon til PostgreSQL

PostgreSQL er en avansert objektrelasjonelt databasestyringssystem (ORDBMS), avledet fra Berkeley Postgres databasebehandlingssystem.

[Notat]

Notat

Utviklingsversjoner av BLFS kan ikke bygge eller kjøre noen pakker riktig hvis LFS eller avhengigheter har blitt oppdatert siden den siste stabile versjonene av bøkene.

Pakkeinformasjon

PostgreSQL Avhengigheter

Valgfri

ICU-76.1, libxml2-2.13.5, libxslt-1.1.42, OpenLDAP-2.6.8, Linux-PAM-1.7.0, MIT Kerberos V5-1.21.3 og Bonjour

Valgfri (For å regenerere dokumentasjon)

fop-2.10, docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2, og SGMLSpm-1.1

Redaktørens notater: https://wiki.linuxfromscratch.org/blfs/wiki/postgresql

Installasjon av PostgreSQL

For økt sikkerhet er det bedre å ha en dedikert gruppe og bruker for å kjøre PostgreSQL serveren. Først utstedt som root bruker:

groupadd -g 41 postgres &&
useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
        -u 41 postgres
[Notat]

Notat

Det er flere konfigurasjonselementer som legger til mer funksjonalitet med valgfrie pakker til PostgreSQL. Bruk ./configure --help for å se en liste.

Installer PostgreSQL med følgende kommandoer:

sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&

./configure --prefix=/usr \
            --docdir=/usr/share/doc/postgresql-17.1 &&
make

Det er en rekke programmer i contrib/ mappen. Hvis du skal kjøre denne installasjonen som en server og ønsker å bygge noen av dem, skriv inn make -C contrib eller make -C contrib/<SUBDIR-NAME> for hver undermappe.

Tester må kjøres som en uprivilegert bruker fordi de må starte en midlertidig server og dette forhindres som root bruker. For den samme grunn, må du stoppe alle PostgreSQL servere hvis noen kjører. Hvis en tidligere versjon av PostgreSQL er installert, kan det være nødvendig å bruke --disable-rpath med configure for å unngå feil, men å installere binærfiler opprettet ved hjelp av denne bryteren anbefales ikke. For å teste resultatene, kjør: make check.

[Notat]

Notat

Hvis du installerer PostgreSQL for å oppgradere en eksisterende installasjon, er det viktige trinn du trenger å følge. Hvis hovedversjonen av det nye bygget er større enn forrige versjon, er det en sjanse for at datafilformatet har endret seg. Ny programvare kan ikke bruke de eksisterende datafilene. I dette tilfellet vil serveren ikke starte fordi de gamle programmene har blitt overskrevet, så dataene er utilgjengelige før filformatet er konvertert.

Før oppgradering av en eksisterende installasjon av PostgreSQL, sjekk dokumentasjonen for eventuelle hensyn som du må ha i bakhodet under oppgraderingen. Merk at nye hovedversjoner kan bruke et annet binært format i dataobjektene, noe som forårsaker potensielle inkompatibiliteter. For mer informasjon, vennligst se gjennom oppstrøms dokumentasjon om oppgradering av PostgreSQL her: https://www.postgresql.org/docs/current/upgrading.html.

På dette punktet kan du ha både de gamle og de nye binærfilene installert på filsystemet ditt. Disse binærfilene kan brukes til å utføre en oppgradering av eksisterende databasefiler. For følgende instruksjoner antas det at

  • De aktuelle datafilene er lagret i /srv/pgsql/data

  • De oppgraderte datafilene vil bli lagret i /srv/pgsql/newdata

  • Det er nok diskplass til å holde de aktuelle datafilene to ganger. Oppgraderingen er ikke en innebygd oppgradering, men den vil kopiere dataene til nye databasefiler.

Gjør først en midlertidig installasjon som gir tilgang til de nye binære filene mye enklere:

make DESTDIR=$(pwd)/DESTDIR install

Deretter oppretter du en mappe som kan skrives av postgres brukeren, som root bruker:

install -d -o postgres $(pwd)/DESTDIR/tmp

Stopp nå den eksisterende forekomsten av PostgreSQL og start oppgraderingsprosessen som root bruker:

pushd $(pwd)/DESTDIR/tmp
systemctl stop postgresql
su postgres -c "../usr/bin/initdb -D /srv/pgsql/newdata"
su postgres -c "../usr/bin/pg_upgrade \
                    -d /srv/pgsql/data    -b /usr/bin \
                    -D /srv/pgsql/newdata -B ../usr/bin"
popd

På dette tidspunktet er databasefilene tilgjengelige på to steder på disken. De gamle dataene ligger i /srv/pgsql/data, og de nye dataene er i /srv/pgsql/newdata. Det anbefales å sikkerhetskopiere de gamle databasefilene før du fortsetter.

Deretter fjerner du de gamle databasefilene og gir nytt navn til den nye datamappen som root bruker:

rm -rf /srv/pgsql/data
mv /srv/pgsql/newdata /srv/pgsql/data

Nå, som root bruker:

make install      &&
make install-docs

Hvis du har laget noen av contrib/ programmene, som root bruker:

make -C contrib/<SUBDIR-NAME> install
[Tips]

Tips

Hvis du bare har tenkt å bruke PostgreSQL som en klient for å koble til en server på en annen maskin, er installasjonen din fullført og du bør ikke kjøre de resterende kommandoene.

Hvis du har oppgradert en eksisterende database, hopp over resten av kommandoene fordi databasen din er klar til bruk. Hvis dette er første gang du installerer PostgreSQL, fortsett med initialiseringen.

Initialiser en databaseklynge med følgende kommandoer utstedt av root bruker:

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&
chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Initialiser nå databasen som root bruker:

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

Parameterforklaringer

sed -i ...: Denne sed endrer server socket plassering fra /tmp til /run/postgresql.

--with-openssl: bygger pakken med støtte for OpenSSL krypterte tilkoblinger.

--with-perl: bygger PL/Perl serversiden språk.

--with-python: bygger PL/Python serversiden språk.

--with-tcl: bygger PL/Tcl serversiden språk.

Konfigurere PostgreSQL

Konfigurasjonsfiler

$PGDATA/pg_ident.con, $PGDATA/pg_hba.conf, og $PGDATA/postgresql.conf

PGDATA miljøvariabelen er brukt til å skille databaseklynger fra hverandre ved å sette den til verdien på mappen som inneholder den ønskede klyngen. De tre konfigurasjonsfilene finnes i hver PGDATA/ mappe. Detaljer om formatet på filene og alternativene som kan angis i hver finnes i /usr/share/doc/postgresql-17.1/html/index.html.

Systemd Enhet

Installer postgresql.service enheten inkludert i blfs-systemd-units-20240916 pakken:

make install-postgresql

Starte PostgreSQL Serveren og lage en Prøvedatabase

Databaseserveren kan startes manuelt med følgende kommando (som root bruker):

su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                  /srv/pgsql/data/logfile 2>&1 &'
[Notat]

Notat

Hvis du skripter denne delen, bør du vente på at serveren starter før du går videre, ved å legge til for eksempel sleep 2 etter kommandoen ovenfor.

Instruksjonene nedenfor viser hvordan du oppretter en database, legger til en tabell i den, setter inn noen rader i tabellen og velger dem for å bekrefte at installasjonen fungerer som den skal. Fortsatt som bruker root, kjør:

su - postgres -c '/usr/bin/createdb test' &&
echo "create table t1 ( name varchar(20), state_province varchar(20) );" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Billy', 'NewYork');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Evanidus', 'Quebec');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Jesse', 'Ontario');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

Når du er ferdig med testingen, kan du stenge serveren ved å utstede som root:

su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

Innhold

Installerte Programmer: clusterdb, createdb, createuser, dropdb, dropuser, ecpg, initdb, pg_amcheck, pg_archivecleanup, pg_basebackup, pg_checksums, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivewal, pg_recvlogical, pg_resetwal, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_verifybackup, pg_waldump, pgbench, postgres, psql, reindexdb, vacuumdb, eventuelt, hvis Tcl støtte er bygget, pltcl_delmod, pltcl_listmod, pltcl_loadmod, og valgfritt (i contrib/) oid2name, pg_standby, vacuumlo, og mange andre
Installerte Biblioteker: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgcommon_shlib.a, libpgfeutils.a, libpgport.a, libpgport_shlib.a, libpgtypes.{so,a}, libpq.{so,a}, ulike tegnsettmoduler og valgfrie programmeringsspråkmoduler under /usr/lib/postgresql
Installerte Mapper: /usr/include/{libpq,postgresql}, /usr/lib/postgresql, /usr/share/{doc/postgresql-17.1,postgresql}, og /srv/pgsql

Korte Beskrivelser

clusterdb

er et verktøy for å samle tabeller i en PostgreSQL database

createdb

oppretter en ny PostgreSQL database

createuser

definerer en ny PostgreSQL brukerkonto

dropdb

fjerner en PostgreSQL database

dropuser

fjerner en PostgreSQL brukerkonto

ecpg

er den innebygde SQL forbehandleren

initdb

oppretter en ny databaseklynge

oid2name

løser OID-er (objekt-IDer) og filnoder i en PostgreSQL datamappe

pg_amcheck

ser etter korrupsjon i en eller flere PostgreSQL databaser

pg_archivecleanup

rydder opp i PostgreSQL WAL (write-ahead log) arkivfiler

pg_basebackup

tar grunnleggende sikkerhetskopier av en kjørende PostgreSQL klynge

pg_checksums

aktiverer, deaktiverer eller kontrollerer datasjekksummer i en PostgreSQL databaseklynge

pg_config

henter PostgreSQL versjonsinformasjon

pg_controldata

returnerer informasjon initialisert under initdb, for eksempel katalogversjonen og serverlokaliteter

pg_ctl

kontrollerer stopping og starting av databaseserveren

pg_dump

dumper databasedata og metadata inn i skript som brukes for å gjenskape databasen

pg_dumpall

rekursivt kaller pg_dump for hver database i en klynge

pg_isready

sjekker tilkoblingsstatusen til en PostgreSQL server

pg_receivewal

brukes til å streame write-ahead logger fra en PostgreSQL server

pg_recvlogical

kontroller PostgreSQL logiske dekodingsstrømmer

pg_resetwal

starter om write-ahead logg og annen kontrollinformasjon av en PostgreSQL databaseklynge

pg_restore

oppretter databaser fra dumpfiler opprettet av pg_dump

pg_rewind

synkroniserer en PostgreSQL datamappe med andre datamapper som ble forgrenet fra den første

pg_standby

støtter opprettelsen av en PostgreSQL varm standby server

pg_test_fsync

bestemmer den raskeste wal_sync metoden for PostgreSQL

pg_test_timing

måler timing overhead

pg_upgrade

oppgraderer en PostgreSQL serverforekomst

pg_verifybackup

verifiserer integriteten til en grunnleggende sikkerhetskopi av en PostgreSQL klynge

pg_waldump

viser en lesbar gjengivelse av write-ahead loggen til en PostgreSQL databaseklynge

pgbench

kjører en benchmark test på PostgreSQL

pltcl_delmod

er et støtteskript som brukes til å slette en modul fra en PL/Tcl tabell. Kommandoen krever at Pgtcl pakken blir installert

pltcl_listmod

er et støtteskript som brukes til å liste modulene i en PL/Tcl tabell. Kommandoen krever at Pgtcl pakken blir installert

pltcl_loadmod

er et støtteskript som brukes til å laste en modul inn i en PL/Tcl tabell. Kommandoen krever at Pgtcl pakken blir installert

postgres

er PostgreSQL databaseserveren

psql

er et konsollbasert databaseskall

reindexdb

er et verktøy for å gjenoppbygge indekser i en database

vacuumdb

komprimerer databaser og genererer statistikk for spørringsanalysatoren

vacuumlo

fjerner foreldreløse store objekter fra en PostgreSQL database

libecpg.{so,a}

inneholder funksjoner for å støtte innebygd SQL i C programmer

libecpg_compat.{so,a}

er ecpg kompatibilitetsbiblioteket

libgport.a

er det portspesifikke undersystemet til Postgres bakstykke

libpgtypes.{so,a}

inneholder funksjoner for å håndtere Postgres datatyper

libpq.{so,a}

er C programmererens API til Postgres