Erinevus lehekülje "Lähtetekstist kompileeritud PostgreSQL kasutamine Debianiga" redaktsioonide vahel

Allikas: Kuutõrvaja
(Postgis)
(Skytools)
 
(ei näidata sama kasutaja 156 vahepealset redaktsiooni)
1. rida: 1. rida:
 
===Sissejuhatus===
 
===Sissejuhatus===
  
PostgreSQL tarkvara kasutamiseks Debian Lenny'ga on kaks võimalust
+
PostgreSQL tarkvara kasutamiseks Debian Lenny'ga on kolm võimalust
  
* paigaldada tarkvara paketihaldusest, 20090329 on seal versioon 8.3.6-1
+
* paigaldada tarkvara paketihaldusest, 20100505 on seal versioon 8.3.9
 +
* paigaldada tarkvara paketihaldusest, backports.org repositooriumist,  20100505 on seal versioon 8.4.3
 
* kompileerida tarkvara aadressil http://www.postgresql.org/ jagatavast lähtetekstist
 
* kompileerida tarkvara aadressil http://www.postgresql.org/ jagatavast lähtetekstist
 +
 +
Käesolev tekst tegeleb juhtumiga, kus andmebaas ning olulised lisamoodulid on paigaldatud lähtetekstist, sellisel lähenemisel on sellised eelised
 +
 +
* paindlikkus - kasutaja saab kontrollida, milliste omaduste PostgreSQL täpselt tekib
 +
* andmebaasi versioon - kasutaja saab valida, millist PostgreSQL versiooni kasutada
 +
 +
ja puudused
 +
 +
* automaatsed veaparandused - kasutajal endal on kohustus veaparanduste ja versiooniuuenduste puhul kompileerida PostgreSQL, mida muidu võiks saada uuendada paketihalduse vahenditega
 +
* mitme samasuguste omadustega andmebaasi tekitamisel, nt arenduskeskkond, testkeskkond ja toodangu keskkond puhul tuleb mitu korda kompileerida ning seejuures hoolsasti jälgida, et protseduur alati samamoodi sooritatakse
 +
 +
Kasutaja peab ise otsustama, millisel viisil ta PostgreSQL tarkvara kasutab, paketihaldusest tuleva PostgreSQL kasutamist on kirjeldatud palas http://kuutorvaja.eenet.ee/wiki/Paketihaldusest_paigaldatud_PostgreSQL_kasutamine_Debianiga
  
 
===Ettevalmistuste tegemine===
 
===Ettevalmistuste tegemine===
  
Tekitada operatsioonisüsteemi kasutaja:grupp postgres:postges kodukataloogiga /home/postgres
+
Tekitada operatsioonisüsteemi kasutaja:grupp postgres:postgres kodukataloogiga /home/postgres
  
 
   # groupadd -g 110 postgres
 
   # groupadd -g 110 postgres
   # useradd -u 110 -g postgres -m -d /home/postgres postgres
+
   # useradd -u 110 -g postgres -m -d /opt/postgres postgres
  
Valmistame ette LVM abil failisüsteemid binari installi ning data kluster kataloogide jaoks
+
Valmistame ette LVM abil failisüsteemid binari installi ning andmekluster (ingl. k. data cluster) kataloogide jaoks
  
 
* /usr/local - kuigi PostgreSQL ise hakkab asuma kataloogis /usr/local/postgresql, nagu allpool näeme paigutame lisamooduli Postgis kataloogi /usr/local/postgis ja mõnus on neid korraga käsitleda
 
* /usr/local - kuigi PostgreSQL ise hakkab asuma kataloogis /usr/local/postgresql, nagu allpool näeme paigutame lisamooduli Postgis kataloogi /usr/local/postgis ja mõnus on neid korraga käsitleda
 
* /data/postgresql - andmekluster
 
* /data/postgresql - andmekluster
* /data/backup/postgresql/archive-logs - arhiveeritud wal logid
+
* /data/backup/postgresql/archive-logs - arhiveeritud WAL logid
 +
* /var/log/postgresql - logid
 +
 
 +
Operatsioonisüsteemi peab olema paigaldatud pakett locales, paigaldatud lokaadid
 +
 
 +
  # locale -a
 +
  C
 +
  POSIX
 +
  et_EE.utf8
 +
 
 +
kusjuures süsteemi vaikelokaat on C. Lokaadi lisamiseks sobib öelda
 +
 
 +
# dpkg-reconfigure locales
  
 
===Tarkvara paigaldamine===
 
===Tarkvara paigaldamine===
  
Kuigi PostgreSQL on olemas Debian Lenny jaoks ka pakendatud kujul, tegeleb käesolev tekst sellise juhtumiga, kus andmebaas ning olulised lisamoodulid on paigaldatud lähtetekstist. Kasutame selleks GNU C kompilaatorit (gcc) ning muid abivahendeid, mida saab paigaldada öeldes
+
Kasutame selleks GNU C kompilaatorit (gcc) ning muid abivahendeid, mida saab paigaldada öeldes
 +
 
 +
# apt-get build-dep postgresql-8.3
 +
# apt-get install bison flex
 +
 
 +
Kusjuures, eksituste vältimiseks on parem kui paketihaldusest ei ole paigaldatud PostgreSQL tarkvara, ei teeke ega binaare, st mitte ühtegi neist pakettidest (see nimekiri pole lõplik)
 +
 
 +
postgresql 
 +
postgresql-7.4
 +
postgresql-8.0
 +
postgresql-8.3
 +
postgresql-8.3-pljava
 +
...
  
  # apt-get build-dep postgresql
+
Kui kõnealuses süsteemis kasutatakse nt PHPd koos PostgreSQLiga, siis libpq5 pakett on vajalik.
  # apt-get install bison flex
 
  
 
Paigaldamiseks tuleb logida süsteemi sisse kasutajana postgres ning pakkida lahti PostgreSQLi lähtetekst
 
Paigaldamiseks tuleb logida süsteemi sisse kasutajana postgres ning pakkida lahti PostgreSQLi lähtetekst
  
  bash$ mkdir 20090329 && cd 20090329
+
$ mkdir 20100505 && cd 20100505
  bash$ wget ftp://ftp.eenet.ee/pub/postgresql/source/v8.3.7/postgresql-8.3.7.tar.bz2
+
$ wget ftp://ftp.eenet.ee/pub/postgresql/source/v8.4.4/postgresql-8.4.4.tar.bz2
  bash$ tar jxf postgresql-8.3.7.tar.bz2
+
$ tar jxf postgresql-8.4.4.tar.bz2
  
Veendume, et protsessid ei käi ja failid ei ole kasutuses ning liigutame vanad asjad eest ära
+
Veendume, et protsessid ei käi ja failid ei ole kasutuses ning kui on asjakohane, liigutame vanad asjad eest ära
  
  bash# mv /usr/local/postgresql /usr/local/postgresql-20090329-ennem-837-paigaldust
+
# mv /usr/local/postgresql /usr/local/postgresql-20100505-ennem-843-paigaldust
  bash# mv /data/postgresql /data/postgresql-20090329-ennem-837-paigaldust
+
# mv /data/postgresql /data/postgresql-20100505-ennem-843-paigaldust
  
 
Konfigureerimine, kompileerime ning paigaldame
 
Konfigureerimine, kompileerime ning paigaldame
  
  bash$ ./configure --with-perl --with-libxml --with-libxslt --with-openssl --with-pam --prefix=/usr/local/postgresql 1> ../configure.1.log 2>../configure.2.log
+
$ ./configure --with-perl --with-libxml --with-libxslt --with-openssl --with-pam --with-gssapi \
   bash$ make 1> ../make.1.log 2> ../make.2.log
+
  --prefix=/usr/local/postgresql 1> ../configure-postgresql.1.log 2>../configure-postgresql.2.log
   bash$ make install 1> ../make-install.1.log 2> ../make-install.2.log
+
$ make 1> ../make-postgresql.1.log 2> ../make-postgresql.2.log
 +
$ make install 1> ../make-install-postgresql.1.log 2> ../make-install-postgresql.2.log
 +
 
 +
Tulemusena paigaldatakse süsteemi
 +
 
 +
* /usr/local/postgresql/bin - programmid
 +
* /usr/local/postgresql/share/doc/html - dokumentatsioon
 +
* /usr/local/postgresql/include - header failid
 +
* /usr/local/postgresql/lib - teegid
 +
 
 +
===contrib moodulid===
 +
 
 +
Kompileerimise õnnestumiseks tuleb PostgreSQL kompileerida võtmega --with-libxslt
 +
 
 +
  $ cd contrib/xml2
 +
  $ make
 +
  $ make install
 +
 
 +
Kui andmebaas juba töötab, tuleb laadida skript
 +
 
 +
  postgresql-8.3.7/contrib/xml2/pgxml.sql
 +
 
 +
pgcrypto mooduli paigaldamiseks tuleb öelda
 +
 
 +
  $ cd contrib/pgcrypto
 +
  $ make
 +
  $ make install
 +
 
 +
pldebuggeri paigaldamiseks tuleb tarkvara kopeerida aadressilt http://pgfoundry.org/projects/edb-debugger/ ning pakkida lahti contrib kataloogis
 +
 
 +
  $ tar zxf edb-debugger-0.93.tgz
 +
  $ cp -a pldebugger postgresql-8.3.9/contrib
 +
  $ make
 +
   $ make install
 +
 
 +
Lisatakse failid
 +
 
 +
/usr/local/postgresql/share/contrib
 +
/usr/local/postgresql/share/contrib/pldbgapi.sql
 +
/usr/local/postgresql/lib
 +
/usr/local/postgresql/lib/pldbgapi.so
 +
/usr/local/postgresql/lib/plugins
 +
/usr/local/postgresql/lib/plugins/plugin_debugger.so
 +
/usr/local/postgresql/lib/targetinfo.so
 +
 
 +
TODO: selgitada välja, miks pldebugger ei kompileeru 8.4.3 PostgreSQLiga
 +
 
 +
===PL/Java paigaldamine===
 +
 
 +
PL/Java võimaldab kasutada java't andmebaasist. PL/Java kasutamiseks peab olema süsteemis 2010 aasta kevade seisuga JDK 1.6 ning tarkvara kodulehekülge asub aadressil http://wiki.tada.se/index.php/PL/Java
 +
 
 +
$ tar zxf pljava-src-1.4.0.tar.gz
 +
$ export JAVA_HOME=/usr/local/java
 +
$ export PATH=/usr/local/java/bin:$PATH
 +
$ make 1>../pljava-make.1.log 2>../pljava-make.2.log
 +
$ make install 1>../pljava-make-install.1.log 2>../pljava-make-install.2.log
 +
 
 +
Failisüsteemi tekib juurde kaks faili
 +
 
 +
/usr/local/postgresql/lib/pljava.jar
 +
/usr/local/postgresql/lib/pljava.so
 +
 
 +
Kui andmebaas juba töötab, tuleb laadida skript
 +
 
 +
  pljava/pljava-1.4.0/src/sql/install.sql
 +
 
 +
CVS'ist http://wiki.tada.se/index.php/CVS saab värskemat lähteteksti, nt võib see paremini kompileerida PostgreSQL v. 8.4.3 andmebaasiga
 +
 
 +
$ cvs -d:pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava login
 +
$ cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava checkout org.postgresql.pljava
 +
$ cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava log org.postgresql.pljava
 +
 
 +
===PL/Proxy===
 +
 
 +
PL/Proxy https://developer.skype.com/SkypeGarage/DbProjects/PlProxy on PL/Proxy.
 +
 
 +
Tarkvara paigaldamine toimub sellise järgnevusena
 +
 
 +
  $ wget http://pgfoundry.org/frs/download.php/2665/plproxy-2.1.tar.gz
 +
  $ tar zxf plproxy-2.1.tar.gz
 +
  $ make
 +
  $ make install
 +
  /bin/sh /usr/local/postgresql/lib/pgxs/src/makefiles/../../config/install-sh -c \
 +
    -m 644 plproxy.sql '/usr/local/postgresql/share/contrib'
 +
  /bin/sh /usr/local/postgresql/lib/pgxs/src/makefiles/../../config/install-sh -c \
 +
    -m 755  libplproxy.so.0.0 '/usr/local/postgresql/lib/plproxy.so'
 +
 
 +
ja tulemusena lisanduvad süsteemi kaks faili
 +
 
 +
  /usr/local/postgresql/share/contrib/plproxy.sql
 +
  /usr/local/postgresql/lib/plproxy.so
 +
 
 +
Seejärel tuleb baasi keele lisamiseks täita plproxy.sql skript, nt öeldes
 +
 
 +
  $ psql -U postgres -h localhost portaal < /usr/local/postgresql/share/contrib/plproxy.sql
 +
 
 +
Iseenesest see skript sisaldab lauseid
 +
 
 +
  -- handler function
 +
  CREATE FUNCTION plproxy_call_handler ()
 +
  RETURNS language_handler AS '$libdir/plproxy' LANGUAGE C;
 +
 
 +
  -- language
 +
  CREATE LANGUAGE plproxy HANDLER plproxy_call_handler;
 +
 
 +
===Skytools===
 +
 
 +
Skytools https://developer.skype.com/SkypeGarage/DbProjects/SkyTools tarkvara koosneb kolmes komponendist
 +
 
 +
* PgQ - Pythoni skriptid ja PostgreSQL teegid
 +
* Londiste -
 +
* walmgr -
 +
 
 +
Tarkvara paigaldamiseks sobib sooritada nt selline järgnevus
 +
 
 +
# apt-get install python-psycopg2
 +
$ wget http://pgfoundry.org/frs/download.php/2561/skytools-2.1.11.tar.gz
 +
$ tar zxf skytools-2.1.11.tar.gz
 +
$ ./configure --prefix=/usr/local/skytools
 +
$ make
 +
$ make install
 +
 
 +
Tulemusena lisandub failisüsteemi
 +
 
 +
* /usr/local/skytools kataloogi mitmed utiliidid
 +
* /usr/local/postgresql/lib - PostgreSQL teegid
 +
 
 +
/usr/local/postgresql/lib/pgq_lowlevel.so
 +
/usr/local/postgresql/lib/logtriga.so
 +
/usr/local/postgresql/lib/pgq_triggers.so
 +
 
 +
* /usr/local/postgresql/share/contrib kataloogi mitmed sql skriptid
 +
 
 +
Kui Skytools programmid ei ole tee peal, siis sobib nt pgqadm kasutamiseks öelda
 +
 
 +
$ export PYTHONPATH=/usr/local/skytools/lib/python2.5/site-packages
 +
$ /usr/local/skytools/bin/pgqadm.py /home/postgres/londiste/ticker.ini status
 +
 
 +
===PostGIS===
 +
 
 +
PostGIS http://postgis.refractions.net/ (Geographic Information Systems Extensions to PostgreSQL) on PostgreSQL andmebaasi laiendus, mis võimaldab kasutada PostgreSQL andmebaasi GIS (Geographic Information Systems) objektide jaoks. Tavaliselt paigaldatakse lisaks ka PROJ4 ja GEOS teegid.
 +
 
 +
====PROJ4 teekide paigaldamine====
 +
 
 +
PROJ4 teekide lähtetekstid saab kopeerida aadressilt http://trac.osgeo.org/proj/ või paigaldada Debian Lenny paketihaldusest, paigaldame paketihaldusest (versioon 4.6.0-2)
 +
 
 +
   # apt-get install proj
 +
 
 +
====GEOS teekide paigaldamine====
 +
 
 +
Kuna PostGIS v. 1.5.1 nõuab GEOS (Geometry Engine - Open Source) teekide versiooni 3.1.1 või uuemat ning Debian Lenny paketihaldus sisaldab versiooni 3.0.0, tuleb lähtetekstid kopeerida aadressilt http://geos.refractions.net/. Kopileerimiseks sobib öelda
 +
 
 +
$ tar jxf geos-3.2.2.tar.bz2
 +
$ ./configure --prefix=/usr/local/geos 1>../configure.geos.1.log 2>../configure.geos.2.log
 +
 
 +
kusjuures faili lõpus öeldakse, et ja see on ok
 +
 
 +
Swig: false
 +
Python: false
 +
Ruby: false
 +
 
 +
$ make 1>../make.geos.1.log 2>../make.geos.2.log
 +
$ make install 1>../make-install.geos.1.log 2>../make-install.geos.2.log
 +
 
 +
====PostGIS laienduse paigaldamine====
 +
 
 +
PostGIS tuleb paigaldada peale seda, kui on paigadatud PROJ4 ja GEOS teegid ning PostgreSQL andmebaas.
 +
 
 +
  $ wget http://postgis.refractions.net/download/postgis-1.5.1.tar.gz
 +
  $ cd postgis-1.5.1
 +
  $ ./configure --with-geos --with-proj --with-geosconfig=/usr/local/geos/bin/geos-config --prefix=/usr/local/postgis \
 +
    1>../postgis-configure-1.log 2>../postgis-configure-2.log
 +
 
 +
kusjuures postgis-configure-1.log peab ütlema midagi sellist lõpus
 +
 
 +
PostGIS is now configured for x86_64-unknown-linux-gnu
 +
 +
-------------- Compiler Info -------------
 +
  C compiler:          gcc -g -O2
 +
  C++ compiler:        g++ -g -O2
 +
 +
-------------- Dependencies --------------
 +
  GEOS config:          /usr/local/geos/bin/geos-config
 +
  GEOS version:        3.2.2
 +
  PostgreSQL config:    /usr/local/postgresql/bin/pg_config
 +
  PostgreSQL version:  PostgreSQL 8.4.3
 +
  PROJ4 version:        46
 +
  Libxml2 config:      /usr/bin/xml2-config
 +
  Libxml2 version:      2.6.32
 +
  PostGIS debug level:  0
 +
 +
-------- Documentation Generation --------
 +
  xsltproc:           
 +
  xsl style sheets:   
 +
  dblatex:             
 +
  convert:     
 +
 
 +
Sellised vealogis esinevad teated ei pruugi olla olulised
 +
 
 +
configure: WARNING: ImageMagick does not seem to be installed. Documentation cannot be built
 +
configure: WARNING: xsltproc is not installed so documentation cannot be built
 +
configure: WARNING: dblatex is not installed so PDF documentation cannot be built
 +
configure: WARNING: could not locate Docbook stylesheets required to build the documentation
 +
configure: WARNING: could not locate CUnit required for liblwgeom unit tests
 +
 
 +
Kompileerimiseks ja paigaldamiseks tuleb öelda
 +
 
 +
  $ make 1> ../postgis-make-1.log 2>../postgis-make-2.log
 +
  $ make install 1> ../postgis-make-install-1.log 2>../postgis-make-install-2.log
 +
 
 +
Tulemusena paigaldatakse süsteemi failid
 +
 
 +
/usr/local/postgresql/bin/shp2pgsql
 +
/usr/local/postgresql/bin/pgsql2shp
 +
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_13_to_15.sql
 +
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_14_to_15.sql
 +
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_15_minor.sql
 +
/usr/local/postgresql/share/contrib/postgis-1.5/uninstall_postgis.sql
 +
/usr/local/postgresql/share/contrib/postgis-1.5/postgis.sql
 +
/usr/local/postgresql/share/contrib/postgis-1.5/spatial_ref_sys.sql
 +
/usr/local/postgresql/lib/postgis-1.5.so
 +
 
 +
===PostGIS tarkvara uuendamine===
 +
 
 +
PostGIS tarkvara uuendamisel uuendatakse kolme sorti komponente
 +
 
 +
* PostGIS C teek failisüsteemis
 +
* PostGIS funktsioonid andmebaasis
 +
* PostGIS andmed andmebaasis
 +
 
 +
PostGIS README.postgis kirjeldab kahte sorti uuendusi
 +
 
 +
* soft upgrade - TODO
 +
* hard upgrade - nt juhtumil, kui muutub andmebaasi major versioon, 8.3 -> 8.4
 +
 
 +
Järgnevas kirjeldatakse hard upgrade'i, toimub kaks uuendust
 +
 
 +
* PostgreSQL 8.3.7 -> 8.4.3
 +
* PostGIS 1.3 -> 1.5.1
 +
 
 +
====Olemasoleva andmebaasi töö lõpetamine====
 +
 
 +
Olgu seoses PostGISiga kasutusel kaks andmebaasi, loom ja lind. Versiooniuuendusel on vaja kasutada nn -Fc formaadis andmebaaside dumpisid, nende moodustamiseks sobib öelda
 +
 
 +
$ pg_dump -Fc -h localhost -U postgres -f loom-20100505.fcdump loom
 +
$ pg_dump -Fc -h localhost -U postgres -f lind-20100505.fcdump lind
 +
 
 +
Seejärel tuleb olemasoleva andmebaasi protsessid lõpetada ning failisüsteemi tasemel liigutada eest ära olemasolevad kataloogid
 +
 
 +
* /data/postgresql - andmekluster
  
Initsialiseerime andmebaasi
+
# mv /data/postgresql /data/postgresql-20100505
 +
 
 +
* /usr/local/postgresql - PostgreSQL binary
 +
 
 +
# mv /usr/local/postgresql /usr/local/postgresql-20100505
 +
 
 +
* /usr/local/postgis - PostGIS teek
 +
 
 +
# mv /usr/local/postgis /usr/local/postgis-20100505
 +
 
 +
====Uue PostgreSQL ja PostGIS tarkvara paigaldamine ja käivitamine====
 +
 
 +
Uus PostgreSQL ja PostGIS tarkvara paigaldamise protseduur iseenesest ei erine sellest, kas tegu on esmakordse tarkvara kasutama asumise juhtumiga või kavatsusega sooritada versiooniuuendus.
 +
 
 +
Kuna PostGIS teek asub versioonil 1.5.1 PostgreSQL teekide kataloogis ning andmebaasi dumpis on viidatud vanale teegi asukohale, tuleb moodustada vastav link
 +
 
 +
$ mkdir /usr/local/postgis/lib
 +
$ ln -s /usr/local/postgresql/lib/postgis-1.5.so /usr/local/postgis/lib/liblwgeom.so
 +
 
 +
PostgreSQL käivitamine toimub tavapäraselt, kuid lisaks tuleb näidata GEOS teegi asukoht, nt LD_LIBRARY_PATH abil
 +
 
 +
$ export LD_LIBRARY_PATH=/usr/local/geos/lib
 +
$ /usr/local/postgresql/bin/pg_ctl -D /data/postgresql -l logfile start
 +
 
 +
kusjuures LD_LIBRARY_PATH rida sobib lisada kasutaja shelli profiili.
 +
 
 +
====Andmete import====
 +
 
 +
Enne andmete importi tuleb moodustada andmebaasi kasutajad, selleks sobib kasutada vana andmebaasi töö lõpetamisel tehtud märkmeid.
 +
 
 +
$ pg_dumpall -g -h localhost -U postgres
 +
 
 +
kus -g näitab, et tuleb väljastada globaalne osa andmebaasist, praktiliselt rollide kirjeldused.
 +
 
 +
$ psql -h localhost -U postgres postgres < globals.sql
 +
 
 +
Seejärel tuleb seada sobivalt keskkonnamuutujad, nt
 +
 
 +
$ export PGPASSWORD=parool
 +
$ export PGHOST=localhost
 +
$ export PGPORT=5432
 +
$ export PGUSER=postgres
 +
 
 +
ning öelda
 +
 
 +
$ sh utils/postgis_restore.pl postgis/postgis.sql loom loom-20100505.fcdump \
 +
  1> postgis-loom-restore.1.log 2> postgis-loom-restore.2.log
 +
$ sh utils/postgis_restore.pl postgis/postgis.sql lind lind-20100505.fcdump \
 +
  1> postgis-lind-restore.1.log 2> postgis-lind-restore.2.log
 +
 
 +
 
 +
Seejuures kirjutatakse error logisse, mis peaks olema ohutu
 +
 
 +
Use of uninitialized value $larg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1076.
 +
Use of uninitialized value $rarg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1076.
 +
Use of uninitialized value $larg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1085.
 +
Use of uninitialized value $rarg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1085.
 +
ERROR:  language "plpgsql" already exists
 +
ERROR:  function st_histogram2d_in(cstring) does not exist
 +
ERROR:  operator family "btree_geometry_ops" for access method "btree" already exists
 +
ERROR:  operator family "gist_geometry_ops" for access method "gist" already exists
 +
 
 +
Tegevuse käigus maksab jälgida logisid. Tulemusena peaks moodustuma töötav uuendatud andmebaas.
 +
 
 +
===Andmebaasi moodustamine ja käivitamine===
 +
 
 +
Andmebaasi moodustamiseks tuleb esmalt initsialiseerime andmebaasi, näidates sobiva lokaadi
  
 
   bash$ /usr/local/postgresql/bin/initdb -E UNICODE --locale et_EE.UTF-8 -D /data/postgresql
 
   bash$ /usr/local/postgresql/bin/initdb -E UNICODE --locale et_EE.UTF-8 -D /data/postgresql
81. rida: 432. rida:
 
       /usr/local/postgresql/bin/pg_ctl -D /data/postgresql -l logfile start
 
       /usr/local/postgresql/bin/pg_ctl -D /data/postgresql -l logfile start
  
===contrib moodulid===
+
Edasise anmebaasi kasutamisel tuleks kohendada seadistusfaili ja keskkonnamuutujaid kasutuses oleva lokaadi osas
  
  bash$ cd contrib/fuzzystrmatch
+
nt et_EE.UTF-8 kodeeringu puhul sobivad sellised muudatused seadistufailis
  bash$ gmake
 
  bash$ gmake install
 
  
Kompileerimise õnnestumiseks tuleb PostgreSQL kompileerida võtmega --with-libxslt
+
  # These settings are initialized by initdb, but they can be changed.
 +
  lc_messages = 'et_EE.UTF-8'                    # locale for system error message
 +
                                                  # strings
 +
  lc_monetary = 'et_EE.UTF-8'                    # locale for monetary formatting
 +
  lc_numeric = 'et_EE.UTF-8'                      # locale for number formatting
 +
  lc_time = 'et_EE.UTF-8'                        # locale for time formatting
  
  bash$ cd contrib/xml2
+
ja sellised keskkonnamuutujad
  bash$ gmake
 
  bash$ gmake install
 
  
Kui andmebaas juba töötab, tuleb laadida skript
+
  export LC_CTYPE=et_EE.UTF-8
 +
  export LC_COLLATE=et_EE.UTF-8
  
  postgresql-8.3.7/contrib/xml2/pgxml.sql
+
Andmebaasi seiskamiseks ja käivitamise võiks sobida nt selline start-skript
  
pgcrypto mooduli paigaldamiseks tuleb öelda
+
  # cat /etc/init.d/postgresql
 +
  #!/bin/bash
 +
 
 +
  case "$1" in
 +
    start)
 +
      echo "Starting PostgreSQL server"
 +
      /bin/su - postgres -c ". /home/postgres/pg-start.env && /usr/local/postgresql/bin/pg_ctl \
 +
        start -D /data/postgresql -l /var/log/postgresql/pg_ctl.log"       
 +
      ;;
 +
 
 +
    stop)
 +
      echo "Stopping PostgreSQL server"
 +
      /bin/su - postgres -c ". /home/postgres/pg-start.env && /usr/local/postgresql/bin/pg_ctl \
 +
        stop -D /data/postgresql -m fast -l /var/log/postgresql/pg_ctl.log"       
 +
      ;;
 +
 
 +
    *)
 +
      echo "Usage: /etc/init.d/postgresql {start|stop}"
 +
      exit 1
 +
  esac
 +
 
 +
  exit 0
  
  bash$ cd contrib/pgcrypto
+
Kus /home/postgres/pg-start.env failis on kirjeldatud keskkonnamuutujad nt selliselt
  bash$ gmake
 
  bash$ gmake install
 
  
===pljava paigaldamine===
+
  # cat /home/postgres/pg-start.env
 
+
  JAVA_HOME=/usr/local/java
pljava võimaldab kasutada java't andmebaasist, tarkvara kodulehekülge asub aadressil http://wiki.tada.se/display/pljava/Home
+
  UL=/usr/local
 
+
 
   bash$ star zxf pljava-src-1.4.0.tar.gz
+
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:\
   bash$ export JAVA_HOME=/usr/java
+
    /usr/local/java/bin:/opt/oracle/database/bin
   bash$ gmake 1>../pljava-gmake.1.log 2>../pljava-gmake.2.log
+
  export JAVA_HOME=/usr/local/java
  bash$ gmake install 1>../pljava-gmake-install.1.log 2>../pljava-gmake-install.2.log
+
  export ORACLE_HOME=/opt/oracle/database
 
+
    
Kui andmebaas juba töötab, tuleb laadida skript
+
   export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$UL/proj/lib:\
 
+
    $UL/geos/lib:$UL/postgis/lib:/opt/oracle/database/lib:/opt/oracle/database/lib32
  pljava/pljava-1.4.0/src/sql/install.sql
+
   export CLASSPATH=$UL/postgresql/lib/pljava.jar:$UL/xt/xerces.jar:$UL/xt/sax2.jar:$UL/xt/xt20051206.jar:\
 
+
    $UL/xmlsec/commons-logging-api.jar:$UL/xmlsec/serializer.jar:$UL/xmlsec/xercesImpl.jar:\
===Postgis===
+
    $UL/xmlsec/xmlsec-1.4.2.jar:$UL/xmlsec/xmlsecTests-1.4.2.jar:$UL/xmlsec/commons-logging.jar:\
 
+
    $UL/xmlsec/xalan.jar:$UL/xmlsec/xml-apis.jar:$UL/xmlsec/xmlsecSamples-1.4.2.jar
Postgis http://geos.refractions.net/ on PostgreSQL andmebaasi laiendus, mis võimaldab kasutada andmebaasi GIS (Geographic Information Systems) objektide jaoks. Tavaliselt paigaldatakse lisaks ka Proj4 ja GEOS teegid.
 
 
 
====Proj4 teekide paigaldamine====
 
 
 
Proj4 teekide lähtetekstid saab kopeerida aadressilt http://trac.osgeo.org/proj/ või paigaldada Debian Lenny paketihaldusest, paigaldame paketihaldusest (versioon 4.6.0-2)
 
 
    
 
    
   # apt-get install proj
+
   export LC_CTYPE=et_EE.UTF-8
 
+
   export LC_COLLATE=et_EE.UTF-8
====GEOS teekide paigaldamine====
 
 
 
GEOS teekide lähtetekstid saab kopeerida aadressilt http://geos.refractions.net/ ja paigaldada Debian Lenny paketihaldusest, paigaldame paketihaldusest (versioon 3.0.0)
 
 
 
   # apt-get install libgeos-3.0.0 libgeos-dev
 
 
 
====Postgis laienduse paigaldamine====
 
 
 
Postgis tuleb paigaldada peale seda kui on paigadatud Proj4 ja GEOS teegid ning PostgreSQL andmebaas.
 
 
 
  $ wget http://postgis.refractions.net/download/postgis-1.3.5.tar.gz
 
  
 
===Tarkvara uuendamine===
 
===Tarkvara uuendamine===
  
* Kui muutub PostgreSQLi nn minoorne versiooninumber, st tagant poolt kolmas, nt 8.3.6 -> 8.3.7, siis võib sama data klastrit kasutada.  
+
* Kui muutub PostgreSQLi nn minoorne versiooninumber, st tagant poolt kolmas, nt 8.3.6 -> 8.3.7, siis võib sama andmeklustri kataloogi kasutada.  
 
* Kui muutub PostgreSQLi nn mažoorsem versioonumber, nt tagant poolt teine, nt 8.2.x -> 8.3.y, siis tuleb andmed esmalt kopeerida pg_dumpall käsu abil töötavast vanast baasist ära, samal ajal peaks pg_hba.conf failist kasutajate ja programmide ligipääs baasile olema keelatud
 
* Kui muutub PostgreSQLi nn mažoorsem versioonumber, nt tagant poolt teine, nt 8.2.x -> 8.3.y, siis tuleb andmed esmalt kopeerida pg_dumpall käsu abil töötavast vanast baasist ära, samal ajal peaks pg_hba.conf failist kasutajate ja programmide ligipääs baasile olema keelatud
  
150. rida: 506. rida:
 
   1>pg_dumpall-20090329-8.3-in-1.log 2>pg_dumpall-20090329-8.3-in-2.log
 
   1>pg_dumpall-20090329-8.3-in-1.log 2>pg_dumpall-20090329-8.3-in-2.log
  
===Andmebaasi varundamine WAL logide abil===
+
===pgpool===
  
PostgreSQL v. 8.3.7 wal logide salvestamiseks tuleb näidata seadistusfailis ära kahe parameetri väärtused nt selliselt
+
TODO
  
  archive_mode = on              # allows archiving to be done
+
===PgBouncer===
  archive_command = 'test ! -f /data/backup/postgresql/archive-logs/%f && cp %p /data/backup/postgresql/archive-logs/%f'
 
  
* arhive_mode - lülitab sisse andmebaasi tavalise töö taustal wal logide kirjutamise
+
TODO
* archive_command - näitab kuhu wal logid kopeerida
 
  
Taastamiseks sobiv andmete komplekt tekib sellise järgnevuse tulemusel
+
===Andmebaasi kodeering===
  
* Öelda töötava baasi tingimustes
+
  portaal=# show server_encoding;
 +
  server_encoding
 +
  -----------------
 +
  UTF8
 +
  (1 row)
 +
 
 +
  portaal=# show client_encoding;
 +
  client_encoding
 +
  -----------------
 +
  UTF8
  
  $ psql -U postgres postgres -c "select pg_start_backup('backup');"
+
===Märkused===
  
* Seejärel kopeerida baasile vastav failisüsteem
+
* Selleks, et psql, pg_dump jm käsud ei küsiks parooli sobib seadistada keskkonnamuutuja, kuid kasutaja peab ise otsustama, kas selline lahendus on talle sobiv
* Öelda
 
  
   $ psql -U postgres postgres -c "select pg_stop_backup();"
+
   $ export PGPASSWORD=parool
  
* Kopeerida tekkivad wal logid
+
* WAL logide kasutamisel tuleb arvestada, et 8.3 versiooni puhul ei kandu nii üle hash indeksid, vt täpsemalt http://www.postgresql.org/docs/8.3/interactive/continuous-archiving.html#CONTINUOUS-ARCHIVING-CAVEATS
  
===Andmebaasi taaste WAL logide abil===
+
* Kui WAL logide kataloog saab täis, siis tekib logisse igal minutiel selliseid sissekandeid
  
Lähtepunktiks on tarvis kolme asja
+
  2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43405 2009-05-26 10:57:15 EEST 0 LOG:  archive command failed with exit code 1
 +
  2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43406 2009-05-26 10:57:15 EEST 0 DETAIL:  The failed archive command was: test \
 +
    ! -f /data/backup/postgresql/archive-logs/0000000100000018000000CD \
 +
    && cp pg_xlog/0000000100000018000000CD /data/backup/postgresql/archive-logs/0000000100000018000000CD
 +
  2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43407 2009-05-26 10:57:15 EEST 0 WARNING:  transaction log file \
 +
    "0000000100000018000000CD" could not be archived: too many failures
  
* Samal arhitektuuril ja versiooniga andmebaasi kui see, millest tehti eelmises punktis toodud järgnevuse abil andmetest koopia
+
Tavaliselt aitab lihtsalt kataloogi ruumi juurde tegemine, nt vanemate logide kustutamise teel ning kuna viimane mida kopeerida ei saada on tõenäoliselt poolik fail, tuleb see kustutada WAL logide kataloogist. Seejärel jätkab süsteem normaalset tööd.
* data kluster kataloogi sisu nii nagu see eelmises punktis kopeeriti
 
* wal logid nii nagu nad eelmises punktis kopeeriti
 
  
Andmebaasi saab taastada sellise tegevuste järgnevuse abil
+
===PostgreSQL arendusversioon===
  
* Andmebaasi mootor ei käi.
+
Aadressil http://developer.postgresql.org/pgdocs/postgres/anoncvs.html saab tutvuda juhatustega, kuidas kopeerida PostgreSQL lähtetekstid versioonihaldusest ning neid kasutama asuda.
* Kopeerida andmebaasi andmeklustri failisüsteemi, nt /srv/postgresql, pg_start_backup('string') käigus varundatud andmed.
 
* Tekitada nt sellise sisuga fail /srv/postgresql/recovery.conf andmeklusteri kataloogi, fail peab olema postgres kasutaja oma, sest peale protseduuri lõppu nimetatakse see fail ringi recovery.done nimega
 
  
  restore_command = 'cp /srv/backup/postgresql/archive-logs/%f %p'
+
===Kasulikud lisamaterjalid===
  recovery_target_time = '2004-07-14 22:39:00 EST'
 
  
Esimene parameeter näitab, kus wal logid asuvad ja teine, kui palju logisid sisse lugeda.
+
* http://www.postgresql.org/docs/8.3/interactive/index.html
 
+
* [[:WalMgr_kasutamine]]
* Paigutada wal logid kataloogi /srv/backup/postgresql/archive-logs
+
* [[:PgAdmin3]]
* Käivitada andmebaas tavapäraselt viisil, kusjuures soovitavalt on archive_logs välja lülitatud.
+
* [[:PostgreSQL_tarkvara_kasutamine_Solarisega]]
 
+
* [[:Paketihaldusest_paigaldatud_PostgreSQL_kasutamine_Debianiga]]
Käivitamisel tekivad sellised sissekanded andmebaasi logisse
+
* [[:Postgresql]]
 
+
* [[:Andmebaasi haldus-ja arendustarkvara SQL Studio for PostgreSQL]]
  ...
 
 
 
Lisaks taastamisele sobib see tehnika nt töötava andmebaasi kõrvale teise arvutisse andmebaasi mingi seisu moodustamiseks.
 
 
 
===Märkused===
 
 
 
* Selleks, et psql, pg_dump jm käsud ei küsiks parooli sobib seadistada keskkonnamuutuja, kuid kasutaja peab ise otsustama, kas selline lahendus on talle sobiv
 
 
 
  $ export PGPASSWORD=parool
 

Viimane redaktsioon: 27. juuli 2010, kell 15:07

Sissejuhatus

PostgreSQL tarkvara kasutamiseks Debian Lenny'ga on kolm võimalust

  • paigaldada tarkvara paketihaldusest, 20100505 on seal versioon 8.3.9
  • paigaldada tarkvara paketihaldusest, backports.org repositooriumist, 20100505 on seal versioon 8.4.3
  • kompileerida tarkvara aadressil http://www.postgresql.org/ jagatavast lähtetekstist

Käesolev tekst tegeleb juhtumiga, kus andmebaas ning olulised lisamoodulid on paigaldatud lähtetekstist, sellisel lähenemisel on sellised eelised

  • paindlikkus - kasutaja saab kontrollida, milliste omaduste PostgreSQL täpselt tekib
  • andmebaasi versioon - kasutaja saab valida, millist PostgreSQL versiooni kasutada

ja puudused

  • automaatsed veaparandused - kasutajal endal on kohustus veaparanduste ja versiooniuuenduste puhul kompileerida PostgreSQL, mida muidu võiks saada uuendada paketihalduse vahenditega
  • mitme samasuguste omadustega andmebaasi tekitamisel, nt arenduskeskkond, testkeskkond ja toodangu keskkond puhul tuleb mitu korda kompileerida ning seejuures hoolsasti jälgida, et protseduur alati samamoodi sooritatakse

Kasutaja peab ise otsustama, millisel viisil ta PostgreSQL tarkvara kasutab, paketihaldusest tuleva PostgreSQL kasutamist on kirjeldatud palas http://kuutorvaja.eenet.ee/wiki/Paketihaldusest_paigaldatud_PostgreSQL_kasutamine_Debianiga

Ettevalmistuste tegemine

Tekitada operatsioonisüsteemi kasutaja:grupp postgres:postgres kodukataloogiga /home/postgres

 # groupadd -g 110 postgres
 # useradd -u 110 -g postgres -m -d /opt/postgres postgres

Valmistame ette LVM abil failisüsteemid binari installi ning andmekluster (ingl. k. data cluster) kataloogide jaoks

  • /usr/local - kuigi PostgreSQL ise hakkab asuma kataloogis /usr/local/postgresql, nagu allpool näeme paigutame lisamooduli Postgis kataloogi /usr/local/postgis ja mõnus on neid korraga käsitleda
  • /data/postgresql - andmekluster
  • /data/backup/postgresql/archive-logs - arhiveeritud WAL logid
  • /var/log/postgresql - logid

Operatsioonisüsteemi peab olema paigaldatud pakett locales, paigaldatud lokaadid

 # locale -a
 C
 POSIX
 et_EE.utf8

kusjuures süsteemi vaikelokaat on C. Lokaadi lisamiseks sobib öelda

# dpkg-reconfigure locales

Tarkvara paigaldamine

Kasutame selleks GNU C kompilaatorit (gcc) ning muid abivahendeid, mida saab paigaldada öeldes

# apt-get build-dep postgresql-8.3
# apt-get install bison flex

Kusjuures, eksituste vältimiseks on parem kui paketihaldusest ei ole paigaldatud PostgreSQL tarkvara, ei teeke ega binaare, st mitte ühtegi neist pakettidest (see nimekiri pole lõplik)

postgresql  
postgresql-7.4
postgresql-8.0
postgresql-8.3
postgresql-8.3-pljava
...

Kui kõnealuses süsteemis kasutatakse nt PHPd koos PostgreSQLiga, siis libpq5 pakett on vajalik.

Paigaldamiseks tuleb logida süsteemi sisse kasutajana postgres ning pakkida lahti PostgreSQLi lähtetekst

$ mkdir 20100505 && cd 20100505
$ wget ftp://ftp.eenet.ee/pub/postgresql/source/v8.4.4/postgresql-8.4.4.tar.bz2
$ tar jxf postgresql-8.4.4.tar.bz2

Veendume, et protsessid ei käi ja failid ei ole kasutuses ning kui on asjakohane, liigutame vanad asjad eest ära

# mv /usr/local/postgresql /usr/local/postgresql-20100505-ennem-843-paigaldust
# mv /data/postgresql /data/postgresql-20100505-ennem-843-paigaldust

Konfigureerimine, kompileerime ning paigaldame

$ ./configure --with-perl --with-libxml --with-libxslt --with-openssl --with-pam --with-gssapi \
  --prefix=/usr/local/postgresql 1> ../configure-postgresql.1.log 2>../configure-postgresql.2.log
$ make 1> ../make-postgresql.1.log 2> ../make-postgresql.2.log
$ make install 1> ../make-install-postgresql.1.log 2> ../make-install-postgresql.2.log

Tulemusena paigaldatakse süsteemi

  • /usr/local/postgresql/bin - programmid
  • /usr/local/postgresql/share/doc/html - dokumentatsioon
  • /usr/local/postgresql/include - header failid
  • /usr/local/postgresql/lib - teegid

contrib moodulid

Kompileerimise õnnestumiseks tuleb PostgreSQL kompileerida võtmega --with-libxslt

 $ cd contrib/xml2
 $ make
 $ make install

Kui andmebaas juba töötab, tuleb laadida skript

 postgresql-8.3.7/contrib/xml2/pgxml.sql

pgcrypto mooduli paigaldamiseks tuleb öelda

 $ cd contrib/pgcrypto
 $ make
 $ make install

pldebuggeri paigaldamiseks tuleb tarkvara kopeerida aadressilt http://pgfoundry.org/projects/edb-debugger/ ning pakkida lahti contrib kataloogis

 $ tar zxf edb-debugger-0.93.tgz
 $ cp -a pldebugger postgresql-8.3.9/contrib
 $ make
 $ make install

Lisatakse failid

/usr/local/postgresql/share/contrib
/usr/local/postgresql/share/contrib/pldbgapi.sql
/usr/local/postgresql/lib
/usr/local/postgresql/lib/pldbgapi.so
/usr/local/postgresql/lib/plugins
/usr/local/postgresql/lib/plugins/plugin_debugger.so
/usr/local/postgresql/lib/targetinfo.so

TODO: selgitada välja, miks pldebugger ei kompileeru 8.4.3 PostgreSQLiga

PL/Java paigaldamine

PL/Java võimaldab kasutada java't andmebaasist. PL/Java kasutamiseks peab olema süsteemis 2010 aasta kevade seisuga JDK 1.6 ning tarkvara kodulehekülge asub aadressil http://wiki.tada.se/index.php/PL/Java

$ tar zxf pljava-src-1.4.0.tar.gz 
$ export JAVA_HOME=/usr/local/java
$ export PATH=/usr/local/java/bin:$PATH
$ make 1>../pljava-make.1.log 2>../pljava-make.2.log
$ make install 1>../pljava-make-install.1.log 2>../pljava-make-install.2.log

Failisüsteemi tekib juurde kaks faili

/usr/local/postgresql/lib/pljava.jar
/usr/local/postgresql/lib/pljava.so

Kui andmebaas juba töötab, tuleb laadida skript

 pljava/pljava-1.4.0/src/sql/install.sql

CVS'ist http://wiki.tada.se/index.php/CVS saab värskemat lähteteksti, nt võib see paremini kompileerida PostgreSQL v. 8.4.3 andmebaasiga

$ cvs -d:pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava login
$ cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava checkout org.postgresql.pljava
$ cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava log org.postgresql.pljava

PL/Proxy

PL/Proxy https://developer.skype.com/SkypeGarage/DbProjects/PlProxy on PL/Proxy.

Tarkvara paigaldamine toimub sellise järgnevusena

 $ wget http://pgfoundry.org/frs/download.php/2665/plproxy-2.1.tar.gz
 $ tar zxf plproxy-2.1.tar.gz
 $ make
 $ make install
 /bin/sh /usr/local/postgresql/lib/pgxs/src/makefiles/../../config/install-sh -c \
   -m 644 plproxy.sql '/usr/local/postgresql/share/contrib'
 /bin/sh /usr/local/postgresql/lib/pgxs/src/makefiles/../../config/install-sh -c \
   -m 755  libplproxy.so.0.0 '/usr/local/postgresql/lib/plproxy.so'

ja tulemusena lisanduvad süsteemi kaks faili

 /usr/local/postgresql/share/contrib/plproxy.sql
 /usr/local/postgresql/lib/plproxy.so

Seejärel tuleb baasi keele lisamiseks täita plproxy.sql skript, nt öeldes

 $ psql -U postgres -h localhost portaal < /usr/local/postgresql/share/contrib/plproxy.sql

Iseenesest see skript sisaldab lauseid

 -- handler function
 CREATE FUNCTION plproxy_call_handler ()
 RETURNS language_handler AS '$libdir/plproxy' LANGUAGE C;
 
 -- language
 CREATE LANGUAGE plproxy HANDLER plproxy_call_handler;

Skytools

Skytools https://developer.skype.com/SkypeGarage/DbProjects/SkyTools tarkvara koosneb kolmes komponendist

  • PgQ - Pythoni skriptid ja PostgreSQL teegid
  • Londiste -
  • walmgr -

Tarkvara paigaldamiseks sobib sooritada nt selline järgnevus

# apt-get install python-psycopg2
$ wget http://pgfoundry.org/frs/download.php/2561/skytools-2.1.11.tar.gz
$ tar zxf skytools-2.1.11.tar.gz
$ ./configure --prefix=/usr/local/skytools
$ make
$ make install

Tulemusena lisandub failisüsteemi

  • /usr/local/skytools kataloogi mitmed utiliidid
  • /usr/local/postgresql/lib - PostgreSQL teegid
/usr/local/postgresql/lib/pgq_lowlevel.so
/usr/local/postgresql/lib/logtriga.so
/usr/local/postgresql/lib/pgq_triggers.so
  • /usr/local/postgresql/share/contrib kataloogi mitmed sql skriptid

Kui Skytools programmid ei ole tee peal, siis sobib nt pgqadm kasutamiseks öelda

$ export PYTHONPATH=/usr/local/skytools/lib/python2.5/site-packages
$ /usr/local/skytools/bin/pgqadm.py /home/postgres/londiste/ticker.ini status

PostGIS

PostGIS http://postgis.refractions.net/ (Geographic Information Systems Extensions to PostgreSQL) on PostgreSQL andmebaasi laiendus, mis võimaldab kasutada PostgreSQL andmebaasi GIS (Geographic Information Systems) objektide jaoks. Tavaliselt paigaldatakse lisaks ka PROJ4 ja GEOS teegid.

PROJ4 teekide paigaldamine

PROJ4 teekide lähtetekstid saab kopeerida aadressilt http://trac.osgeo.org/proj/ või paigaldada Debian Lenny paketihaldusest, paigaldame paketihaldusest (versioon 4.6.0-2)

 # apt-get install proj

GEOS teekide paigaldamine

Kuna PostGIS v. 1.5.1 nõuab GEOS (Geometry Engine - Open Source) teekide versiooni 3.1.1 või uuemat ning Debian Lenny paketihaldus sisaldab versiooni 3.0.0, tuleb lähtetekstid kopeerida aadressilt http://geos.refractions.net/. Kopileerimiseks sobib öelda

$ tar jxf geos-3.2.2.tar.bz2
$ ./configure --prefix=/usr/local/geos 1>../configure.geos.1.log 2>../configure.geos.2.log

kusjuures faili lõpus öeldakse, et ja see on ok

Swig: false
Python: false
Ruby: false
$ make 1>../make.geos.1.log 2>../make.geos.2.log
$ make install 1>../make-install.geos.1.log 2>../make-install.geos.2.log

PostGIS laienduse paigaldamine

PostGIS tuleb paigaldada peale seda, kui on paigadatud PROJ4 ja GEOS teegid ning PostgreSQL andmebaas.

 $ wget http://postgis.refractions.net/download/postgis-1.5.1.tar.gz
 $ cd postgis-1.5.1
 $ ./configure --with-geos --with-proj --with-geosconfig=/usr/local/geos/bin/geos-config --prefix=/usr/local/postgis \
   1>../postgis-configure-1.log 2>../postgis-configure-2.log

kusjuures postgis-configure-1.log peab ütlema midagi sellist lõpus

PostGIS is now configured for x86_64-unknown-linux-gnu

-------------- Compiler Info ------------- 
 C compiler:           gcc -g -O2
 C++ compiler:         g++ -g -O2

-------------- Dependencies -------------- 
 GEOS config:          /usr/local/geos/bin/geos-config
 GEOS version:         3.2.2
 PostgreSQL config:    /usr/local/postgresql/bin/pg_config
 PostgreSQL version:   PostgreSQL 8.4.3
 PROJ4 version:        46
 Libxml2 config:       /usr/bin/xml2-config
 Libxml2 version:      2.6.32
 PostGIS debug level:  0

-------- Documentation Generation -------- 
 xsltproc:             
 xsl style sheets:     
 dblatex:              
 convert:       

Sellised vealogis esinevad teated ei pruugi olla olulised

configure: WARNING: ImageMagick does not seem to be installed. Documentation cannot be built
configure: WARNING: xsltproc is not installed so documentation cannot be built
configure: WARNING: dblatex is not installed so PDF documentation cannot be built
configure: WARNING: could not locate Docbook stylesheets required to build the documentation
configure: WARNING: could not locate CUnit required for liblwgeom unit tests

Kompileerimiseks ja paigaldamiseks tuleb öelda

 $ make 1> ../postgis-make-1.log 2>../postgis-make-2.log
 $ make install 1> ../postgis-make-install-1.log 2>../postgis-make-install-2.log

Tulemusena paigaldatakse süsteemi failid

/usr/local/postgresql/bin/shp2pgsql
/usr/local/postgresql/bin/pgsql2shp
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_13_to_15.sql
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_14_to_15.sql
/usr/local/postgresql/share/contrib/postgis-1.5/postgis_upgrade_15_minor.sql
/usr/local/postgresql/share/contrib/postgis-1.5/uninstall_postgis.sql
/usr/local/postgresql/share/contrib/postgis-1.5/postgis.sql
/usr/local/postgresql/share/contrib/postgis-1.5/spatial_ref_sys.sql
/usr/local/postgresql/lib/postgis-1.5.so

PostGIS tarkvara uuendamine

PostGIS tarkvara uuendamisel uuendatakse kolme sorti komponente

  • PostGIS C teek failisüsteemis
  • PostGIS funktsioonid andmebaasis
  • PostGIS andmed andmebaasis

PostGIS README.postgis kirjeldab kahte sorti uuendusi

  • soft upgrade - TODO
  • hard upgrade - nt juhtumil, kui muutub andmebaasi major versioon, 8.3 -> 8.4

Järgnevas kirjeldatakse hard upgrade'i, toimub kaks uuendust

  • PostgreSQL 8.3.7 -> 8.4.3
  • PostGIS 1.3 -> 1.5.1

Olemasoleva andmebaasi töö lõpetamine

Olgu seoses PostGISiga kasutusel kaks andmebaasi, loom ja lind. Versiooniuuendusel on vaja kasutada nn -Fc formaadis andmebaaside dumpisid, nende moodustamiseks sobib öelda

$ pg_dump -Fc -h localhost -U postgres -f loom-20100505.fcdump loom
$ pg_dump -Fc -h localhost -U postgres -f lind-20100505.fcdump lind

Seejärel tuleb olemasoleva andmebaasi protsessid lõpetada ning failisüsteemi tasemel liigutada eest ära olemasolevad kataloogid

  • /data/postgresql - andmekluster
# mv /data/postgresql /data/postgresql-20100505
  • /usr/local/postgresql - PostgreSQL binary
# mv /usr/local/postgresql /usr/local/postgresql-20100505
  • /usr/local/postgis - PostGIS teek
# mv /usr/local/postgis /usr/local/postgis-20100505

Uue PostgreSQL ja PostGIS tarkvara paigaldamine ja käivitamine

Uus PostgreSQL ja PostGIS tarkvara paigaldamise protseduur iseenesest ei erine sellest, kas tegu on esmakordse tarkvara kasutama asumise juhtumiga või kavatsusega sooritada versiooniuuendus.

Kuna PostGIS teek asub versioonil 1.5.1 PostgreSQL teekide kataloogis ning andmebaasi dumpis on viidatud vanale teegi asukohale, tuleb moodustada vastav link

$ mkdir /usr/local/postgis/lib
$ ln -s /usr/local/postgresql/lib/postgis-1.5.so /usr/local/postgis/lib/liblwgeom.so

PostgreSQL käivitamine toimub tavapäraselt, kuid lisaks tuleb näidata GEOS teegi asukoht, nt LD_LIBRARY_PATH abil

$ export LD_LIBRARY_PATH=/usr/local/geos/lib
$ /usr/local/postgresql/bin/pg_ctl -D /data/postgresql -l logfile start

kusjuures LD_LIBRARY_PATH rida sobib lisada kasutaja shelli profiili.

Andmete import

Enne andmete importi tuleb moodustada andmebaasi kasutajad, selleks sobib kasutada vana andmebaasi töö lõpetamisel tehtud märkmeid.

$ pg_dumpall -g -h localhost -U postgres

kus -g näitab, et tuleb väljastada globaalne osa andmebaasist, praktiliselt rollide kirjeldused.

$ psql -h localhost -U postgres postgres < globals.sql

Seejärel tuleb seada sobivalt keskkonnamuutujad, nt

$ export PGPASSWORD=parool
$ export PGHOST=localhost
$ export PGPORT=5432
$ export PGUSER=postgres

ning öelda

$ sh utils/postgis_restore.pl postgis/postgis.sql loom loom-20100505.fcdump \
  1> postgis-loom-restore.1.log 2> postgis-loom-restore.2.log
$ sh utils/postgis_restore.pl postgis/postgis.sql lind lind-20100505.fcdump \
  1> postgis-lind-restore.1.log 2> postgis-lind-restore.2.log


Seejuures kirjutatakse error logisse, mis peaks olema ohutu

Use of uninitialized value $larg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1076.
Use of uninitialized value $rarg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1076.
Use of uninitialized value $larg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1085.
Use of uninitialized value $rarg in concatenation (.) or string at utils/postgis_restore.pl line 679, <INPUT> line 1085.
ERROR:  language "plpgsql" already exists
ERROR:  function st_histogram2d_in(cstring) does not exist
ERROR:  operator family "btree_geometry_ops" for access method "btree" already exists
ERROR:  operator family "gist_geometry_ops" for access method "gist" already exists

Tegevuse käigus maksab jälgida logisid. Tulemusena peaks moodustuma töötav uuendatud andmebaas.

Andmebaasi moodustamine ja käivitamine

Andmebaasi moodustamiseks tuleb esmalt initsialiseerime andmebaasi, näidates sobiva lokaadi

 bash$ /usr/local/postgresql/bin/initdb -E UNICODE --locale et_EE.UTF-8 -D /data/postgresql
 The files belonging to this database system will be owned by user "postgres".
 This user must also own the server process.
 
 The database cluster will be initialized with locale et_EE.UTF-8.
 initdb: could not find suitable text search configuration for locale et_EE.UTF-8
 The default text search configuration will be set to "simple".
 
 fixing permissions on existing directory /data/postgresql ... ok
 creating subdirectories ... ok
 selecting default max_connections ... 100
 selecting default shared_buffers/max_fsm_pages ... 32MB/204800
 creating configuration files ... ok
 creating template1 database in /data/postgresql/base/1 ... ok
 initializing pg_authid ... ok
 initializing dependencies ... ok
 creating system views ... ok
 loading system objects' descriptions ... ok
 creating conversions ... ok
 creating dictionaries ... ok
 setting privileges on built-in objects ... ok
 creating information schema ... ok
 vacuuming database template1 ... ok
 copying template1 to template0 ... ok
 copying template1 to postgres ... ok
 
 WARNING: enabling "trust" authentication for local connections
 You can change this by editing pg_hba.conf or using the -A option the
 next time you run initdb.
 
 Success. You can now start the database server using:
 
     /usr/local/postgresql/bin/postgres -D /data/postgresql
 or
     /usr/local/postgresql/bin/pg_ctl -D /data/postgresql -l logfile start

Edasise anmebaasi kasutamisel tuleks kohendada seadistusfaili ja keskkonnamuutujaid kasutuses oleva lokaadi osas

nt et_EE.UTF-8 kodeeringu puhul sobivad sellised muudatused seadistufailis

  # These settings are initialized by initdb, but they can be changed.
 lc_messages = 'et_EE.UTF-8'                     # locale for system error message
                                                 # strings
 lc_monetary = 'et_EE.UTF-8'                     # locale for monetary formatting
 lc_numeric = 'et_EE.UTF-8'                      # locale for number formatting
 lc_time = 'et_EE.UTF-8'                         # locale for time formatting

ja sellised keskkonnamuutujad

 export LC_CTYPE=et_EE.UTF-8
 export LC_COLLATE=et_EE.UTF-8

Andmebaasi seiskamiseks ja käivitamise võiks sobida nt selline start-skript

 # cat /etc/init.d/postgresql
 #!/bin/bash
 
 case "$1" in
   start)
     echo "Starting PostgreSQL server"
     /bin/su - postgres -c ". /home/postgres/pg-start.env && /usr/local/postgresql/bin/pg_ctl \
        start -D /data/postgresql -l /var/log/postgresql/pg_ctl.log"        
     ;;
 
   stop)
     echo "Stopping PostgreSQL server"
     /bin/su - postgres -c ". /home/postgres/pg-start.env && /usr/local/postgresql/bin/pg_ctl \
       stop -D /data/postgresql -m fast -l /var/log/postgresql/pg_ctl.log"         
     ;;
 
   *)
     echo "Usage: /etc/init.d/postgresql {start|stop}"
     exit 1
 esac
 
 exit 0

Kus /home/postgres/pg-start.env failis on kirjeldatud keskkonnamuutujad nt selliselt

 # cat /home/postgres/pg-start.env
 JAVA_HOME=/usr/local/java
 UL=/usr/local
 
 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:\
   /usr/local/java/bin:/opt/oracle/database/bin
 export JAVA_HOME=/usr/local/java
 export ORACLE_HOME=/opt/oracle/database
 
 export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$UL/proj/lib:\
   $UL/geos/lib:$UL/postgis/lib:/opt/oracle/database/lib:/opt/oracle/database/lib32
 export CLASSPATH=$UL/postgresql/lib/pljava.jar:$UL/xt/xerces.jar:$UL/xt/sax2.jar:$UL/xt/xt20051206.jar:\
   $UL/xmlsec/commons-logging-api.jar:$UL/xmlsec/serializer.jar:$UL/xmlsec/xercesImpl.jar:\
   $UL/xmlsec/xmlsec-1.4.2.jar:$UL/xmlsec/xmlsecTests-1.4.2.jar:$UL/xmlsec/commons-logging.jar:\
   $UL/xmlsec/xalan.jar:$UL/xmlsec/xml-apis.jar:$UL/xmlsec/xmlsecSamples-1.4.2.jar
 
 export LC_CTYPE=et_EE.UTF-8
 export LC_COLLATE=et_EE.UTF-8

Tarkvara uuendamine

  • Kui muutub PostgreSQLi nn minoorne versiooninumber, st tagant poolt kolmas, nt 8.3.6 -> 8.3.7, siis võib sama andmeklustri kataloogi kasutada.
  • Kui muutub PostgreSQLi nn mažoorsem versioonumber, nt tagant poolt teine, nt 8.2.x -> 8.3.y, siis tuleb andmed esmalt kopeerida pg_dumpall käsu abil töötavast vanast baasist ära, samal ajal peaks pg_hba.conf failist kasutajate ja programmide ligipääs baasile olema keelatud
 $ /usr/local/postgresql/bin/pg_dumpall -h 127.0.0.1 -U postgres > pg_dumpall-20090329-8.2.sql

ning seejärel uude initsialiseeritud baasi sisse lugeda, öeldes nt

 $ /usr/local/postgresql/bin/psql -h 127.0.0.1 -U postgres template1 < pg_dumpall-20090329-8.2.sql \
 1>pg_dumpall-20090329-8.3-in-1.log 2>pg_dumpall-20090329-8.3-in-2.log

pgpool

TODO

PgBouncer

TODO

Andmebaasi kodeering

 portaal=# show server_encoding;
 server_encoding 
 -----------------
  UTF8
 (1 row)
 
 portaal=# show client_encoding;
 client_encoding 
 -----------------
  UTF8

Märkused

  • Selleks, et psql, pg_dump jm käsud ei küsiks parooli sobib seadistada keskkonnamuutuja, kuid kasutaja peab ise otsustama, kas selline lahendus on talle sobiv
 $ export PGPASSWORD=parool
  • Kui WAL logide kataloog saab täis, siis tekib logisse igal minutiel selliseid sissekandeid
 2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43405 2009-05-26 10:57:15 EEST 0 LOG:  archive command failed with exit code 1
 2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43406 2009-05-26 10:57:15 EEST 0 DETAIL:  The failed archive command was: test \
   ! -f /data/backup/postgresql/archive-logs/0000000100000018000000CD \
   && cp pg_xlog/0000000100000018000000CD /data/backup/postgresql/archive-logs/0000000100000018000000CD
 2009-06-17 23:59:01 EEST    3624  4a1ba0db.e28  43407 2009-05-26 10:57:15 EEST 0 WARNING:  transaction log file \
   "0000000100000018000000CD" could not be archived: too many failures

Tavaliselt aitab lihtsalt kataloogi ruumi juurde tegemine, nt vanemate logide kustutamise teel ning kuna viimane mida kopeerida ei saada on tõenäoliselt poolik fail, tuleb see kustutada WAL logide kataloogist. Seejärel jätkab süsteem normaalset tööd.

PostgreSQL arendusversioon

Aadressil http://developer.postgresql.org/pgdocs/postgres/anoncvs.html saab tutvuda juhatustega, kuidas kopeerida PostgreSQL lähtetekstid versioonihaldusest ning neid kasutama asuda.

Kasulikud lisamaterjalid