PostgreSQL andmebaasi haldamine operatsioonisüsteem Debian keskkonnas
Sissejuhatus
PostgreSQL tarkvara Debiani paketihaldusest kasutamisele on iseloomulik, et saab
- samast binarist käivitada mitu komplekti andmebaasi protsesse, millest iga kasutab erinevat andmeklastrit (komplektile vastav failisüsteemi osa, kus hoitakse andmebaasi andmefaile, wal logisid jms)
- kasutada samaaegselt mitut PostgreSQL versiooni (nt Debian Lenny puhul v. 8.3 ja 8.4; Debian Squeeze puhul v. 8.4 ja v. 9.0; lisaks saab backportsidest kasutada v. 9.1) kusjuures nendega ei maksa ka liiale minna
Käesolevas tekstis pööratakse peamiselt tähelepanu PostgreSQL andmebaasi tarkvara paigaldamisele ja kasutamisele Debiani nö tavalisest paketihaldusest, lisaks kirjeldatakse kolme alternatiivi
- Debian backports
- The PostgreSQL Global Development Group (PGDG) apt repositoorium
- Enterprise DB
Keskkonna ettevalmistamine
Riistava ettavalmistamise osas üldiselt PostgreSQL andmebaasile meeldib palju mälu ja kiire IO. Lisaks peab olema kasutada vajaliku suurusega failisüsteemid, erinevate kataloogide alla monteerituna
- /var/lib/postgresql - Debian/Ubuntu vaikekataloog andmefailide jms jaoks
- /var/backup/postgresql - isetehtud kataloog wal archive logide jaoks
- /var/lib/postgresql/9.4/main/pg_xlog - konkreetse baasi log failid, see peaks idee poolest olema väga hea io'ga kui ta panna eraldi
Failisüsteemide all võiks kasutada LVM'i, see teeb haldustegevused lihtsamaks
- oluliste muudatuste eel teha snapshot
- käivitada töötavast baasist tehtud snapshoti pealt teine eksemplar, et mida uurida
- kui pg_xlog on eraldi failisüsteemis, siis ei saa töötavast baasist lvm snapshoti teha kuna ei õnnestu tekitada kahest failisüsteemist snapshotti samaaegselt (/var/lib/postgresql ja /var/lib/postgresql/9.4/main/pg_xlog)
Tarkvara ettavalmistamise osas ei ole vaja PostgreSQL osas midagi erilist jälgida, paketihaldus jälgib. Erandina tuleks pöörata tähelepanu lokaadi seadistamisele, nt
- paigaldada pakett locales
- seadistada vajalikud lokaadid, nt et_EE.UTF-8
Tarkvara paigaldamine
PostgreSQL paigaldamiseks sobib öelda
# apt-get install postgresql-9.4
mille tulemusena tekitatakse
- kasutaja:grupp postgres:postgres
- klastrite käivitamise skript /etc/init.d/postgresql või vastav systemd osa
- /usr/lib/postgresql/9.4 - versioonile vastavad programmifailid
- paigaldatakse ka andmebaasi käsurea klient pakett, kus on utiliidid psql, pg_dump jm
- lähtestatakse andmebaasi klaster nimega 'main'
Lähtestamise tulemusena tekib
- /etc/postgresql/9.4/main - seadistusfailid
- /var/lib/postgresql/9.4/main - andmefailid
- /var/log/postgresql/postgresql-9.4-main.log - logi
Tulemusena käivitakse ka andmebaasi protsess. Kui on kavatsus kasutada ainult ühte PostgreSQL protsesside komplekti, siis see ei ole niivõrd oluline, aga mitme erineva versiooni puhul on oluline tähele panna, et
- konkreetse versiooni tarkvara asub versiooni nimelises kataloogis
- utiliidid, nt /usr/bin/pg_dump on wrapper skripti abil ühendatud konkreetse versiooniga (mitte alternatives süsteemi abil)
# ls -ld /usr/bin/psql lrwxrwxrwx 1 root root 37 Dec 21 13:15 /usr/bin/psql -> ../share/postgresql-common/pg_wrapper
Selleks, et konkreetset versiooni välja kutsuda, tuleb kasutada pikka teed, nt
/usr/lib/postgresql/9.4/bin/pg_dump /usr/lib/postgresql/9.5/bin/pg_dump
Lisaks põhiosale jagatakse lisasid (nn contrib moodulid) paketis postgresql-contrib-9.4, mille paigaldamiseks tuleb öelda
# apt-get install postgresql-contrib-9.4
contrib pakett sisaldab muuhulgas selliseid mooduleid
- dblink
- pgcrypto
- adminpack
- earthdistance
- pgstattuple
contrib tarkvara paigaldatakse kataloogidesse
- skriptid - /usr/share/postgresql/9.4/contrib
- teegid - /usr/lib/postgresql/9.4/lib
Andmebaasiklastrite haldamine
Ühe töötava PostgreSQL protsessi kontrolli all olevad andmed moodustavad andmeklastri, mille moodustavad ja millega on seotud
- üks andmefailide kataloog - nt /var/lib/postgresql/9.4/main
- seadistusfailid pg_hba, postgresql.conf jt - nt kataloogis /etc/postgresql/8.9/main
- logifail - nt /var/log/postgresql/postgresql-9.4-main.log
Selleks, et saaks samaaegselt kasutada mitut andmeklastrit on süsteemis Debianile spetsiifilised utiliidid
- pg_createcluster - klastri moodustamine
- pg_dropcluster - klastri eemaldamine
- pg_lsclusters - klastrite nimekirja esitamine
- pg_ctlcluster - klastri andmebaasi protsessi kontrollimine
Iga andmeklaster peab töötama erineval pordil, st ei saa töötada nt 127.0.0.1 port 5432 ja 127.0.0.2 port 5432 peal. Põhjusel, et shared memory segment on nimetatud pordi järgi.
Klastrit saab protsesside käivitamise jms mõttes juhtida kahel viisil
- os käivitusskriptiga või vastavate systemd vahenditega
- Debiani PostgreSQL paketi kooseisu kuuluvate pg_* utiliitidega
Käesolevas tekstis kasutatakse pigem pg_* utiliite.
Klastri moodustamine
Juurkasutajana tuleb öelda, näidates andmebaasi versiooni, klastri nime ja lisaks lokaadi, nt v. 9.4, main ja ee_EE.UTF-8 (/tmp kataloogi minek on vajalik sest juurkasutaja asub vahel oma kodukataloogis /root ning klastri tekitamisel minnakse tegutsema kasutajana postgres ja jäädakse samasse kataloogi ning saab ohutu veateate)
# cd /tmp # pg_createcluster --locale et_EE.UTF-8 9.4 main
Klastrite tekitamisel tuleb kasutada unikaalseid nimesid kusjuures süsteem ise jälgib, et iga klaster kasutaks erinevat porti (5432, 5433 jne). Vaikimisi ei ole andmebaasile üle võrgu ligipääs lubatud ning postgres kasutaja parool on seadistamata. Kui PostgreSQL panna ka postgresql.conf failist võrgus kuulama porti ning pg_hba.conf failis lubada üle võrgu ligi, siis seadistamata parool tähendab, et keegi ei saa ligi (ja mitte, et kõik saavad ligi). Ligi saamiseks tuleb
- lubadata pg_hba.conf failist korraks mingi host trust abil
- logida baasi üle unix soketi ja seadistada postgres kasutajale parool
Peale moodustamist tuleb protsessid käivitada
# pg_ctlcluster version 9.4 start
Kuna tegu on tundliku teenusega, siis ei maksa käivitusskripte üleliia usaldada, nt maksab kontrollida peale protsesside töö lõpetamist, et protsesse tõesti enam ei ole
# ps U postgres
või ei ole avatud faile
# lsof -n | grep '/var/lib/postgresql/9.4/main'
Klastri eemaldamine
Klastri eemaldamisel kustutatakse vastavad andmefailid ja seadistusfailid, --stop tähendab, et esmalt lõpetatakse vastava protsessi töö
# pg_dropcluster version main --stop
Lisaks saab -- järel esitada pg_ctl programmi suvandeid, nt
# pg_ctlcluster 9.4 main stop -- -m immediate
Klastrite kontollimine
Klastri seiskamine toimub skriptga pg_cltcluster, nt
# pg_ctlcluster 9.4 tartu stop
Klastrite nimekirja estitamine toimub skriptiga pg_lsclusters
# pg_lsclusters Version Cluster Port Status Owner Data directory Log file 9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log 9.4 tartu 5433 down postgres /var/lib/postgresql/9.4/tartu /var/log/postgresql/postgresql-9.4-tartu.log 9.4 elva 5434 online postgres /var/lib/postgresql/9.4/elva /var/log/postgresql/postgresql-9.4-elva.log
Fail /etc/postgresql/9.4/klastrinimi/start.conf näitab, kas PostgreSQL klastrite käivitamise skript tegeleb vastava klastriga või mitte. Lisaks saab kasutada pg_ctl programmi suvandeid, nt
# pg_ctlcluster 9.4 tartu stop -- -m immediate
Erinevate PostgreSQL versioonide haldamine
Lisaks sama PostgreSQL andmebaasi versiooni binarist mitmete protsesside käivitamisele, millest iga kasutab erinevat andmeklastrit on võimalik kasutada kas mitmeid erinevaid PostgreSQL versioone. Nt kui arvutisse on paigaldatud Debian Lenny v. 5 keskkonnas paketid postgresql-8.3 ja postgresql-8.4.
Erinevate klientprogrammide versioonide kasutamine
Olgu süsteemi paigaldatud sellised PostgreSQL versioonid ja töötagu nad nt selliselt
# pg_lsclusters Version Cluster Port Status Owner Data directory Log file 8.4 main 5434 online postgres /var/lib/postgresql/8.4/main /var/log/postgresql/postgresql-8.4-main.log 8.4 main_utf8 5435 online postgres /var/lib/postgresql/8.4/main_utf8 /var/log/postgresql/postgresql-8.4-main_utf8.log 9.0 main 5432 online postgres /var/lib/postgresql/9.0/main /var/log/postgresql/postgresql-9.0-main.log 9.1 main 5433 online postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log 9.1 main_utf8 5436 online postgres /var/lib/postgresql/9.1/main_utf8 /var/log/postgresql/postgresql-9.1-main_utf8.log
Erinevaid psql kliendi versiooni saab kasutada nt --cluster võtme abil (tundub, et see ei tööta siiski)
$ psql -V --cluster 8.4/main psql (PostgreSQL) 8.4.9 contains support for command-line editing $ psql -V --cluster 9.0/main psql (PostgreSQL) 9.0.5 contains support for command-line editing
Parem on kasutada pikka teed
$ /usr/lib/postgresql/9.5/bin/pg_dump ...
Kõige olulisem on tõenäoliselt kasutada õiget programmide pg_dump ja pg_restore versiooni.
Andmebaasi seadistamine
Andmebaasi moodustamiseks on kaks viisi
- SQL käsuga
- Debiani paketihalduses sisalduva shell skriptiga
Andmebaasi moodustamine shell skriptiga
# createdb -h 127.0.0.1 -p 5432 -U postgres -O omanikunimi -E UTF8 -l en_US.UTF-8 -e baasinimi CREATE DATABASE baasinimi OWNER omanikunimi ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
kus
- -h, -p ja -U - millised andmebaasi protsessi poole pöördudakse create database andmebaasi moodustamiseks
- -E - encoding
- -l - collate ja ctype
- -e esitab käsud, mis andmebaasile öeldi
- baasinimi on moodustatava create database andmebaasi nimi
Andmebaasi kustutamiseks sobib öelda
# dropdb -h 127.0.0.1 -p 5432 -U postgres -e baasinimi DROP DATABASE baasinimi
kus
- -h, -p ja -U - millised andmebaasi protsessi poole pöördudakse create database andmebaasi kustutamiseks
- -e - esitab käsud, mis andmebaasile öeldi
- baasinimi on kustutatava create database andmebaasi nimi
Andmebaasi moodustamine SQL käsuga
TODO
core failide salvestamine
core failide salvestamiseks tuleb kasutada seadistusfailis /etc/postgresql/9.0/main/pg_ctl.conf rida
# cat /etc/postgresql/9.0/main/pg_ctl.conf ... pg_ctl_options = '-c'
ning selguse mõttes võiks lisaks kasutada sellist sysctl väärtust
# sysctl -w kernel.core_pattern=core.%e.%p
Tulemusena ...
contrib moodulite paigaldamine
contrib moodulite kasutamiseks tuleb reeglina laadida soovitud skeemi mooduliga kaasas olevad funktsioonid ja muud objektid.
dblink
dblink http://www.postgresql.org/docs/current/static/dblink.html võimaldab kasutada ühe andmebaasi päringutes teise andmebaasi andmeid.
Vajadusel näidata dblink.sql skriptis skeemirada
-- Adjust this setting to control where the objects get created. SET search_path = dblink;
Paigaldamiseks tuleb laadida funktsioonid soovitud skeemi
$ psql -h 127.0.0.1 -U postgres test < /usr/share/postgresql/8.4/contrib/dblink.sql
Uuemal ajal, st nt PostgreSQL v. 9.2 puhul sobib öelda
SQL> create extension dblink;
pgcrypto
pgcrypto http://www.postgresql.org/docs/current/static/pgcrypto.html võimaldab kasutada andmebaasis krüptimise funktsioone.
Vajadusel näidata pgcrypto.sql skriptis skeemirada
-- Adjust this setting to control where the objects get created. SET search_path = pgcrypto;
Paigaldamiseks tuleb laadida funktsioonid soovitad skeemi
$ psql -h 127.0.0.1 -U postgres test < /usr/share/postgresql/8.4/contrib/pgcrypto.sql
Uuemal ajal, st nt PostgreSQL v. 9.2 puhul sobib öelda
SQL> \c baasinimi SQL> create extension pgcrypto;
Tulemusena tekitatakse baasinimi nimelisse create database andmebaasi public skeemi paarkümmend funktsiooni.
tsearch2
tsearch2 http://www.postgresql.org/docs/8.4/static/textsearch.html on täisteksti otsingu moodul.
Vajadusel näidata tsearch2.sql skriptis skeemirada
-- Adjust this setting to control where the objects get created. SET search_path = tsearch2;
Paigaldamiseks tuleb laadida funktsioonid soovitad skeemi
$ psql -h 127.0.0.1 -U postgres test < /usr/share/postgresql/8.4/contrib/tsearch2.sql
PL-keeled
TODO
plpgsql
PL/pgSQL on üks PostgreSQL andmebaasi protseduuriline keel. Keele lisamiseks sobib öelda kas
$ createlang -h 127.0.0.1 -U postgres plpgsql movies
Ja tulemuse kontrollimiseks
movies=# select * from pg_language ; lanname | lanowner | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl ----------+----------+---------+--------------+---------------+--------------+-------- internal | 10 | f | f | 0 | 2246 | c | 10 | f | f | 0 | 2247 | sql | 10 | f | t | 0 | 2248 | plpgsql | 10 | t | t | 16446 | 16447 | (4 rows)
ehk otsekohesemalt
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator;
plpython
# apt-get install postgresql-plpython-8.4
plperl
# apt-get install postgresql-plperl-8.4
Ja keele kirjeldamiseks andmebaasis tuleb öelda
CREATE PROCEDURAL LANGUAGE 'plperlu' HANDLER plperl_call_handler VALIDATOR plperl_validator;
plproxy
PL/Proxy https://developer.skype.com/SkypeGarage/DbProjects/PlProxy tarkvara võimaldab esitada andmebaasist päringuid teise andmebaasi. Tarkvara paigaldamiseks sobib öelda
# apt-get install postgresql-8.4-plproxy
Keele lisamiseks tuleb öelda
$ psql -h 127.0.0.1 ... < /usr/share/postgresql-8.4-plproxy/plproxy.sql
ehk
CREATE FUNCTION plproxy_call_handler () RETURNS language_handler AS '$libdir/plproxy' LANGUAGE C; -- language CREATE LANGUAGE plproxy HANDLER plproxy_call_handler;
pgpool-II
pgpool-II http://pgpool.projects.postgresql.org/ tarkvara ...
# apt-get install pgpool2
Andmebaasi ettevalmistamine SSL kasutamiseks
TODO
Serveri sertifikaadi juurutamine
Selleks, et PostgreSQL andmebaasi klient saaks andmebaasiga ühenduda kasutades seejuurel SSL'i peab olema vastav toetus nii andmebaasi serveri kui kliendi poolel olemas. Serveri poolel tuleb SSL sisselülitamiseks
- seadisusfailis kasutada nt ridu
ssl=on ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'
- pg_hba failis kasutada nt rida
hostssl all all 192.168.10.10/32 md5
ning lisaks andmeklastri kataloogi paigutada sertifikaat ning vastav salajane võti
$ find /var/lib/postgresql/8.4/main/server.* /var/lib/postgresql/8.4/main/server.crt /var/lib/postgresql/8.4/main/server.key
Tulemusena on kliendi ja serveri vaheline ühendus turvaline kusjuures server ei kontrolli kliendi sertifikaati. Muudatuste kehtestamiseks tuleb teha andmebaasi protsessile stop ja start.
Vaikimisi on genereeritud serverile selline sertifikaat
$ openssl x509 -in server.crt -noout -text ... Issuer: CN=localhost.localdomain Validity Not Before: Jan 14 14:55:05 2010 GMT Not After : Jan 12 14:55:05 2020 GMT Subject: CN=localhost.localdomain ...
Kasutaja sertifikaadi kontrollimise juurutamine
Selleks, et server kontrolliks kasutaja sertifikaati tuleb serveri andmeklastri kataloogi lisada fail
/var/lib/postgresql/8.4/main/root.crt
milles sisaldub ahel, mille vastu on kliendi sertifikaat väljastatud.
Andmebaasi käivitamine
# /etc/init.d/postgresql stop|start
kusjuures
- /etc/postgresql/8.4/main/environment faili abil saab kirjeldada baasi protsessi jaoks keskkonnamuutujaid, nt nihutada /usr/local/geos/lib teeki ettepoole
LD_LIBRARY_PATH = '/usr/local/geos/lib'
Andmebaasiga ühendumine
TODO
Connection parameters abil
Ühendusparameetrite (ingl. k. connection parameters) abil andmebaasiga ühendumist kirjeldatakse aadressil http://www.postgresql.org/docs/8.4/interactive/libpq-connect.html, tavaliselt moodustab kasutaja tavaliselt oma kodukataloogi nt sarnase sisuga faili
$ cat .pg_service.conf [auul-pg] host=192.168.1.245 dbname=baasinimi user=priit sslmode=require
kus
- sslmode=require - ühendumiseks kasutatakse tingimata ssl režiimi
Andmebaasiga ühendumiseks piisab seejärel öelda
$ psql "service=auul-pg" Password for user postgres: Welcome to psql 8.3.12, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) baasinimi=>
Kliendi sertifikaadi kasutamine
http://www.postgresql.org/docs/8.3/interactive/libpq-ssl.html
PL/Java
2011 kevadel tuleb kompileerida JVM v. 1.5 abil ning kasutada saab ka JVM .v 1.6 tarkvaraga
# export JAVA_HOME=/usr/local/java-1.5 # export PATH=/usr/local/java-1.5/bin:$PATH # ... # make # make install
Tulemusena on lisatud kaks teeki
# find /usr/lib/postgresql/9.0 -mmin -1 -ls 328250 4 drwxr-xr-x 3 root root 4096 May 17 10:08 /usr/lib/postgresql/9.0/lib 329513 1224 -rwxr-xr-x 1 root root 1246388 May 17 10:08 /usr/lib/postgresql/9.0/lib/pljava.so 329514 160 -rw-r--r-- 1 root root 156108 May 17 10:08 /usr/lib/postgresql/9.0/lib/pljava.jar
Käivitamiseks sobib /etc/postgresql/9.0/main/environment failis kirjeldada JAVA_HOME ja PATH koos javaga.
binary in-place upgrade 9.0 -> 9.1
Tööpõhimõte
- serverid käivitatakse kuulama unixi soketitel
Ettevalmistused
- Lähtepunktiks olev andmebaas peaks olema viimasele stabiilsele oma major versiooni sub-versioonile uuendatud, nt 9.2.4 -> 9.2.6 eeldusel, et .6 on parasjagu viimane.
- Olulised pikalt töötavad käsud võiks öelda screen programmi abil.
- Tagada, et baasi poole migratsiooni käigus miski kõrvaline ei saaks pöörduda, nt seisata cron protsess.
Tegevused
http://www.postgresql.org/docs/9.1/static/pgupgrade.html tehnika võimaldab uuendada PostgreSQL andmebaasi ilma andmete dumpimiseta, st ilma vajaduseta kasutada nt pg_dump ja pg_restore utiliite.
- Initsialiseerida uue versiooni klaster samade omadustega nagu uuendatav on olnud, nt (ebaselge on, kas seejärel võib või ei tohi korraks uut klastrit käivitada, pigem mitte, juhend ütleb 'There is no need to start the new cluster.')
# pg_createcluster --locale et_EE.UTF-8 9.1 main
- Paigaldada custom shared object teegid, nt contrib ning muud teegid, nt pljava, vajadusel kasutada LD_LIBRARY_PATH vms keskkonnamuutajaid
- Paigaldada serverite dev paketid, milles sisaldub vajalik pg_config utiliit
# apt-get install postgresql-server-dev-9.0 postgresql-server-dev-9.1
- Kohendada autentimist, et kui protseduuri käigus vahepeal käivitatakse serveri protsesse, siis saaks vajalik osaline ligi ja mittevajalikud mitte
- Kohendada postgresql.conf faile, et server ei salvestaks wal logi, st kasutada rida
archive_mode = off
- Veenduda, et serverite protsessid ei tööta
- Näidata -o ja -O suvanditega seadistusfailide asukohad või kopeerida pg_hba.cf ja postgresql.conf vastavatesse andmeklastri kataloogidesse
- Käivitada kasutajana postgres /usr/lib/postgresql/9.1/bin/pg_upgrade kataloogis, kuhu on kasutajal postgres kirjutamise õigus uuendamise võimalikkuse kontrollimiseks
$ /usr/lib/postgresql/9.1/bin/pg_upgrade -b /usr/lib/postgresql/9.0/bin -B /usr/lib/postgresql/9.1/bin \ -d /var/lib/postgresql/9.0/main -D /var/lib/postgresql/9.1/main -p 5434 -P 5433 -o '-D /etc/postgresql/9.0/main' -O '-D /etc/postgresql/9.1/main' -c Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok Checking cluster versions ok Checking database user is a superuser ok Checking for prepared transactions ok Checking for reg* system oid user data types ok Checking for contrib/isn with bigint-passing mismatch ok Checking for prepared transactions ok Checking for presence of required libraries ok Clusters are compatible
kus
- kasutatakse uue versiooni pg_upgrade programmi
- -b - vana binary
- -B - uus binary
- -d - vana andmeklastri kataloog
- -D - uue andmeklastri kataloog
- -p - vana port
- -P - uue port
- -o - vana seadistusfailide kataloog
- -O - uue seadistusfailide kataloog
- -j - mitut paralleelset lõime kasutada (loogiline oleks näidata arvuks protsessori tuumade arv, st mis top CPU arvuks ütleb)
- -c - check režiim
Check käigus moodustatakse käesolevasse kataloogi neli faili
-rw------- 1 postgres postgres 896 Feb 24 21:21 pg_upgrade_internal.log -rw------- 1 postgres postgres 179 Feb 24 21:21 pg_upgrade_restore.log -rw------- 1 postgres postgres 1211 Feb 24 21:21 pg_upgrade_server.log -rw------- 1 postgres postgres 179 Feb 24 21:21 pg_upgrade_utility.log
- Probleemide korral jälgida väljundit ja kui serveri ei taha käivituda, käivitada korra käsitsi, nt selliselt ning vaadata /tmp/9.0.log failist logi
$ /usr/lib/postgresql/9.0/bin/pg_ctl -w -l "/tmp/9.0.log" -D "/var/lib/postgresql/9.0/main" -o "-p 5432 \ -c autovacuum=off -c autovacuum_freeze_max_age=2000000000" start'
- Käivitada kasutajana postgres /usr/lib/postgresql/9.1/bin/pg_upgrade uuendamiseks
$ /usr/lib/postgresql/9.1/bin/pg_upgrade -b /usr/lib/postgresql/9.0/bin -B /usr/lib/postgresql/9.1/bin \ -d /var/lib/postgresql/9.0/main -D /var/lib/postgresql/9.1/main -p 5434 -P 5433 Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok Checking cluster versions ok Checking database user is a superuser ok Checking for prepared transactions ok Checking for reg* system oid user data types ok Checking for contrib/isn with bigint-passing mismatch ok Creating catalog dump ok Checking for prepared transactions ok Checking for presence of required libraries ok | If pg_upgrade fails after this point, you must | re-initdb the new cluster before continuing. | You will also need to remove the ".old" suffix | from /var/lib/postgresql/9.0/main/global/pg_control.old. Performing Upgrade ------------------ Adding ".old" suffix to old global/pg_control ok Analyzing all rows in the new cluster ok Freezing all rows on the new cluster ok Deleting new commit clogs ok Copying old commit clogs to new server ok Setting next transaction id for new cluster ok Resetting WAL archives ok Setting frozenxid counters in new cluster ok Creating databases in the new cluster ok Adding support functions to new cluster ok Restoring database schema to new cluster ok Removing support functions from new cluster ok Copying user relation files /var/lib/postgresql/9.0/main/base/16427/204423 ... Restoring user relation files ok Setting next oid for new cluster ok Creating script to delete old cluster ok Upgrade complete ---------------- | Optimizer statistics are not transferred by pg_upgrade | so consider running: | vacuumdb --all --analyze-only | on the newly-upgraded cluster. | Running this script will delete the old cluster's data files: | /opt/postgres/delete_old_cluster.sh
Uuendamise käigus moodustatakse käesolevasse kataloogi sellised failid
postgres@eap:/opt/postgres/20130302/tmp$ ls -l total 6624 -rw------- 1 postgres postgres 2326237 Mar 2 17:26 pg_upgrade_dump_all.sql -rw------- 1 postgres postgres 2316285 Mar 2 17:26 pg_upgrade_dump_db.sql -rw------- 1 postgres postgres 9930 Mar 2 17:26 pg_upgrade_dump_globals.sql -rw------- 1 postgres postgres 13817 Mar 2 17:28 pg_upgrade_internal.log -rw------- 1 postgres postgres 2085221 Mar 2 17:26 pg_upgrade_restore.log -rw------- 1 postgres postgres 1772 Mar 2 17:26 pg_upgrade_server.log -rw------- 1 postgres postgres 1330 Mar 2 17:26 pg_upgrade_utility.log
- Teha vacuum analyze, eelnevalt on vaja uue andmebaasi protsessid käivitada
$ vacuumdb --all --analyze-only 1>/tmp/9.1-vacuum-1.log 2>/tmp/9.1-vacuum-2.log
- Kustutada andmeklastri kataloogist sinna kopeeritud pg_hba.conf ja postgresql.conf
- Kohendada ligipääsud normaalseteks ning lülitada wal arhiveerimine sisse (kui seda kasutatakse)
in-place upgrade tegemisel kopeerimise teel tuleb arvestada, et vana andmeklastri pg_control fail nimetatakse ümber
/var/lib/postgresql/9.0/main/global/pg_control -> /var/lib/postgresql/9.0/main/global/pg_control.old
Kui mingil põhjusel on tarvis vana klaster käivitada, tuleb see fail tagasi nimetada.
binary in-place upgrade 9.1 -> 9.2
Tundub, et väga sarnane 9.0 -> 9.1 uuendusega
- pg_upgrade tulemusena tekitatakse käesolevasse kataloogi mõned skriptid, mida soovitatakse käivitada, nt
analyze_new_cluster.sh
binary in-place upgrade 9.2 -> 9.3
Tundub, et väga sarnane 9.0 -> 9.1 uuendusega
binary in-place upgrade 9.3 -> 9.4
Tundub, et väga sarnane 9.3 -> 9.4 uuendusega
Katse näitab, et ka v. 8.4.22 -> 9.4.0 toimib.
binary in-place upgrade 9.4 -> 9.5
Tundub, et väga sarnane 9.4 -> 9.5 uuendusega
binary in-place upgrade 9.5 -> 9.6
Tundub, et väga sarnane 9.5 -> 9.6 uuendusega
Debian backports repositoorium
PostgreSQL v. 9.0 andmebaasi kasutamine
Debian Squeeze backports repositooriumist saab kasutada PostgreSQL v. 9.0 andmebaasi tarkvara, paigaldamiseks tuleb
- näidata /etc/apt/sources.list failis backports asukoht
# cat /etc/apt/sources.list ... deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
- uuendada apt-get update abil kirjeldused ning paigaldada tarkvara
# apt-get update # apt-get -t squeeze-backports install postgresql-9.0
PostgreSQL v. 9.1 andmebaasi kasutamine
Debian Squeeze backports repositooriumist saab kasutada PostgreSQL v. 9.1 andmebaasi tarkvara, paigaldamiseks tuleb
- näidata /etc/apt/sources.list failis backports asukoht
# cat /etc/apt/sources.list ... deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
- uuendada apt-get update abil kirjeldused ning paigaldada tarkvara
# apt-get update # apt-get -t squeeze-backports install postgresql-9.1
PGDG repositoorium
The PostgreSQL Global Development Group (PGDG) repositooriumi kasutamist kirjeldatakse aadressil https://wiki.postgresql.org/wiki/Apt. Esmalt tuleb lisada /etc/apt/sources.list faili nt rida (wheezy asemel kasutada sobivat, nt jessie)
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
seejärel öelda
# apt-get update ... W: GPG error: http://apt.postgresql.org wheezy-pgdg Release: The following signatures were invalid: KEYEXPIRED 1381654177
ning paigaldada pakett pgdg-keyring vastates 'y'
# apt-get install pgdg-keyring
ning uuesti
# apt-get update
Seejärel saab PostgreSQL tarkvara erinevaid pakette paigaldada nö tavalisel viisil, 2013 oktoobris paistavad olema kasutada sellised paketid
# apt-cache search postgresql | grep 9.3 libpgtypes3 - shared library libpgtypes for PostgreSQL 9.3 postgresql-9.3 - object-relational SQL database, version 9.3 server postgresql-9.3-dbg - debug symbols for postgresql-9.3 postgresql-9.3-ip4r - IPv4 and IPv6 types for PostgreSQL 9.3 postgresql-9.3-pgmemcache - PostgreSQL interface to memcached postgresql-9.3-pgmp - arbitrary precision integers and rationals for PostgreSQL 9.3 postgresql-9.3-pgpool2 - connection pool server and replication proxy for PostgreSQL - modules postgresql-9.3-pllua - Lua procedural language for PostgreSQL 9.3 postgresql-9.3-plproxy - database partitioning system for PostgreSQL 9.3 postgresql-9.3-plr - Procedural language interface between PostgreSQL and R postgresql-9.3-plsh - PL/sh procedural language for PostgreSQL 9.3 postgresql-9.3-plv8 - Procedural language interface between PostgreSQL and JavaScript postgresql-9.3-postgis-2.1 - Geographic objects support for PostgreSQL 9.3 postgresql-9.3-postgis-2.1-scripts - PostGIS for PostgreSQL 9.3 -- scripts -- dummy package postgresql-9.3-postgis-scripts - Geographic objects support for PostgreSQL 9.3 -- scripts postgresql-9.3-slony1-2 - replication system for PostgreSQL: PostgreSQL 9.3 server plug-in postgresql-client-9.3 - front-end programs for PostgreSQL 9.3 postgresql-contrib-9.3 - additional facilities for PostgreSQL postgresql-doc-9.3 - documentation for the PostgreSQL database management system postgresql-plperl-9.3 - PL/Perl procedural language for PostgreSQL 9.3 postgresql-plpython-9.3 - PL/Python procedural language for PostgreSQL 9.3 postgresql-plpython3-9.3 - PL/Python 3 procedural language for PostgreSQL 9.3 postgresql-pltcl-9.3 - PL/Tcl procedural language for PostgreSQL 9.3 postgresql-server-dev-9.3 - development files for PostgreSQL 9.3 server-side programming skytools-modules-9.3 - PostgreSQL 9.3 modules for skytools
Tundub, et nii paidaldatud tarkvara sobib kasutada koos varem süsteemi paigaldatud debiani enda või backports repost paigaldatud PostgreSQL'iga, wrapperid töötavad
# pg_lsclusters Version Cluster Port Status Owner Data directory Log file 9.0 main 5433 down <unknown> /var/lib/postgresql/9.0/main custom 9.1 main 5434 down postgres /var/lib/postgresql/9.1/main custom 9.2 main 5432 online postgres /var/lib/postgresql/9.2/main custom
ühe erinevusega, psql käsu --cluster võti ei toimi, ilmselt kuna pg-wrapperis on read
$ diff /usr/share/postgresql-common/pg_wrapper /tmp/pg_wrapper 100c100,108 < my $cmd = get_program_path ($cmdname, $version); --- > my $cmd; > > # for psql we always want the latest version, as this is backwards compatible > # to every major version that that we support > if ($cmdname eq 'psql') { > $cmd = get_program_path ('psql', get_newest_version); > } else { > $cmd = get_program_path ($cmdname, $version); > }
libpq5 teegi versioon
PostgreSQL paigaldamisel, nt
# apt-get install postgresql-9.2
paigaldatakse muu hulgas viimane stabiilne libpq5 pakett, st igal juhul viimase 9.x versiooni oma. PGDG FAQ kõneleb, et libpq5 on tagasi ühilduv ja nii sobibki üldiselt kasutada. Vajadusel saab kasutada sama libpq5 versiooni täpsustades versioon sources.list failis
deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main 9.2
ning öeldes nt
# apt-get install postgresql-9.2=9.2.17-1.pgdg80+1 libpq5=9.2.17-1.pgdg80+1
Märkused
- /root kataloog peab olema postgres kasutaja jaoks sisenetav või peab pg_createcluster käsu ütlemise ajal olema mõnes sellises kataloogis, nt /tmp
- Kui PostgreSQL käivitamise väga varases faasis on probleeme, siis need ei pruugi jõuda logisse, aitab käivitada käsurealt foregroundis, nt normaalsel puhul
postgres@moraal:~$ /usr/lib/postgresql/9.5/bin/postgres -D /etc/postgresql/9.5/test 2016-02-04 16:59:11 EET [16820-1] LOG: database system was shut down at 2016-02-04 16:57:50 EET 2016-02-04 16:59:11 EET [16820-2] LOG: MultiXact member wraparound protections are now enabled 2016-02-04 16:59:11 EET [16824-1] LOG: autovacuum launcher started 2016-02-04 16:59:11 EET [16819-1] LOG: database system is ready to accept connections
ja ebanormaalsel
postgres@piia-pg5a:~$ /usr/lib/postgresql/8.4/bin/postgres -D /etc/postgresql/8.4/main FATAL: invalid value for parameter "lc_messages": "et_EE.UTF-8"
Versiooni uuendmine, lc_collate muutmine ja data-checksums sisselülitamine
# pg_createcluster --locale et_EE.UTF-8 10 test -- --data-checksums $ time /usr/lib/postgresql/10/bin/pg_dump -p 5432 -j 4 -Fd -f for-pg-10-from-pg-10-baasinimi-2021215.dir baasinimi $ time /usr/lib/postgresql/10/bin/pg_restore -p 5435 -j 4 -d baasinimi for-pg-10-from-pg-10-baasinimi-2021215.dir \ 1>pg_restore-log.1-from-10-to-10 2>pg_restore-log.2-from-10-to-10 $ time /usr/lib/postgresql/11/bin/pg_upgrade -j 4 -b /usr/lib/postgresql/10/bin -B /usr/lib/postgresql/11/bin -d /var/lib/postgresql/10/main -D /var/lib/postgresql/11/tmp -p 5441 -P 5442 -o '-D /etc/postgresql/10/main' -O '-D /etc/postgresql/11/tmp'
pg_upgradecluster utiliidi kasutamine
TODO
postgres@baas:~/202301012$ pg_upgradecluster -m upgrade -v 14 9.4 pgclustername
kus
- -m upgrade tähistab asjaolu, et uuendamisel kasutatakse pg_upgrade (mitte nt pg_dump)
- -v 14 - uus versioon
- 9.4 positsioonil on vana versioon
- pgclustername positsioonil on vana versiooni cluster name (nagu nt pg_lsclusters väljundis paistab)
- tulemusena matkitakse isegi seadistusi (konstrueeritakse vanale sarnane postgresql.conf)
pg_wait_sampling
TODO
Kasulikud lisamaterjalid
- https://www.youtube.com/watch?v=aaXsGK2iSfo&t=345s
- https://postgrespro.com/docs/enterprise/16/pg-wait-sampling