PostgreSQL

From RCUB
Jump to: navigation, search
(Upgrade sa 8.1 na 8.3: Dodao restore i vacuum)
(Upgrade major verzije)
 
Line 3: Line 3:
 
JDBC connection string je oblika:
 
JDBC connection string je oblika:
  
   jdbc:postgresql://server.rcub.bg.ac.yu/baza
+
   jdbc:postgresql://server.rcub.bg.ac.rs/baza
  
 
Default port je 5432, a drajver je:  
 
Default port je 5432, a drajver je:  
Line 15: Line 15:
 
Tako da je verovatno najlakše kreirati posebne baze i koristiti njihove  
 
Tako da je verovatno najlakše kreirati posebne baze i koristiti njihove  
 
default "public" šeme.
 
default "public" šeme.
 +
 +
==Instalacija putem YUM managera==
 +
Potrebne informacije su [http://yum.pgsqlrpms.org/index2.php ovde].
  
 
==PSQL komande==
 
==PSQL komande==
Line 38: Line 41:
 
  \du - listanje svih korisnika
 
  \du - listanje svih korisnika
  
Kreiranje baze:
+
Kreiranje baze u Postgresu. Prilikom kreiranja treba obratiti pažnju na lokalizaciju. Ukoliko je potrebno da se latinična sortiranja rade po srpskoj latinici, potrebno je navesti odgovarajuće parametre, npr:
 +
 
 +
CREATE DATABASE test_baza ENCODING = 'UTF8' LC_COLLATE = 'sr_RS' LC_CTYPE = 'sr_RS' TEMPLATE template0;
 +
 
 +
Ukoliko je potrebno da se latinična sortiranja rade po engleskim pravilima:
 +
 
 +
CREATE DATABASE test_baza WITH ENCODING='UTF8';
 +
 
 +
Srpska ćirilična sortiranja bi trebalo da rade u oba slučaja ispravno.
  
CREATE DATABASE "TestBaza" WITH ENCODING='UTF8';
 
  
 
Kreiranje korisnika:
 
Kreiranje korisnika:
Line 48: Line 58:
 
Izbor baze:
 
Izbor baze:
  
  \c TestBaza
+
  \c test_baza
  
 
Dodeljivanje privilegija nad default "public" šemom.
 
Dodeljivanje privilegija nad default "public" šemom.
Line 104: Line 114:
 
   sudo -u postgres pg_ctl reload -D /var/lib/pgsql/data/
 
   sudo -u postgres pg_ctl reload -D /var/lib/pgsql/data/
  
==Koriscenje proceduralinih jezika==
+
Za postgres 9.0:
 +
 
 +
  sudo -u postgres /usr/pgsql-9.0/bin/pg_ctl reload -D /var/lib/pgsql/9.0/data/
 +
 
 +
===Optimizovanje servera===
 +
Za izvlačenje maksimuma mogućnosti iz PostgreSQL-a poželjno je pročitati detljno ceo [http://wiki.postgresql.org/wiki/Performance_Optimization Optimization Guide]. Poglavlje [http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server Tuning] se najviše tiče optimizovanja svakodnevnog rada servera i objašnjava sve tajne postgres.conf. Jedan od interesatnih članaka je [http://www.linux.com/learn/tutorials/394523-configuring-postgresql-for-pretty-good-performance ovde] a postoji i cela [http://www.packtpub.com/postgresql-90-high-performance/book knjiga].
 +
 
 +
Moguće je dati neke osnovne preporuke za optimizovanje PostgreSQL servera. Poželjno je dodeliti serveru više memorije nego što je konfigurisano u podrazumevanim postavkama. U sledećim postavkama u tabeli, koje treba uzeti s zrncem soli, se nalazi jedan predlog postavki koji bi trebalo da omogući performantniji rad PostgreSQL servera za konfiguraciju koja bi PostgreSQL serveru ostavila 1GB radne memorije, 16GB radne memorije i poređenje sa podrazumenvanim postavkama u PostgreSQL-u 8.3:
 +
 
 +
{| class="wikitable" style="text-align:center; width:750px; height:200px;"
 +
|+ postgres.conf
 +
|-
 +
!
 +
! 8.3 def
 +
! 1GB
 +
! 16GB
 +
! komentar
 +
|-
 +
! <code>max_connections</code>
 +
| 100 || 30 || 30 ||  align="right" width="50%"| proceniti koliko je konekcija zaista potrebno i dodati neku rezervu
 +
|-
 +
! <code>shared_buffers</code>
 +
| 32MB || 256MB || 4096MB || align="right"| treba RAM/4
 +
|-
 +
! <code>effective_cache_size</code>
 +
| 1000 || 128MB || 10240MB || align="right"| treba RAM/2, mada može i do RAM*3/4
 +
|-
 +
! <code>chekpoint_segments</code>
 +
| 3 || 15 || 15 || align="right"| minimum 10 ako je ''write intensive'' aplikacija može i 32
 +
|-
 +
! <code>checkpoint_completion_target</code>
 +
| 0.5 || 0.9 || 0.9 || align="right"| uvek se povećava na 0.9 kada se povećeva <code>chekpoint_segments</code>
 +
|-
 +
! <code>default_statistics_target</code>
 +
| 10 || 100 || 100 || align="right"| uvek na 100
 +
|-
 +
! <code>work_mem</code>
 +
| 1MB || 4MB || 40MB || align="right"| obratiti pažnju da <code>max_connections</code>*<code>work_mem</code> bude manji od npr. RAM/8
 +
|}
 +
Slične rezultate moguće je dobiti i ovim odličnim online kalkulatorom za podešavanja PostgreSQL-a [http://pgtune.leopard.in.ua/ online kalkulatorom za podešavanja PostgreSQL-a].
 +
 
 +
==Koriscenje proceduralnih jezika==
  
 
PostgreSQL podrzava vise proceduralnih jezika: PL/pgSQL, PL/Tcl, PL/Perl, PL/Python.  
 
PostgreSQL podrzava vise proceduralnih jezika: PL/pgSQL, PL/Tcl, PL/Perl, PL/Python.  
Line 110: Line 161:
  
 
   CREATE LANGUAGE plpgsql;
 
   CREATE LANGUAGE plpgsql;
 
  
 
==Backup i restore==
 
==Backup i restore==
Line 133: Line 183:
 
   vacuumdb -az
 
   vacuumdb -az
  
==Upgrade sa 8.1 na 8.3==
+
==Upgrade major verzije==
  
Standardna CentOS instalacija sadrži PostgreSQL 8.1, koji je zastareo.
 
 
Kod Postgresa su prve dve cifre oznaka major verzije, što znači da je  
 
Kod Postgresa su prve dve cifre oznaka major verzije, što znači da je  
8.3 dve major verzije iznad 8.1.  
+
npr. 9.2 major upgrade u odnosu na 9.1 i slično.
  
Pre upgrade-a uraditi backup, i premestiti DB klaster direktorijum,
+
Major upgrade podrazumeva da je došlo do promene na strukturi podataka
kao što je opisano na:
+
u fajl sistemu i da je potreban export/import prilikom upgrade-a.
  
   http://www.postgresql.org/docs/8.3/interactive/install-upgrading.html
+
Za razliku od toga kod minor upgrade-a (npr. 9.1.2 u 9.1.4) struktura
 +
podataka je sigurno ostala ista i nije potreban eksport i import.
 +
 
 +
Pre upgrade-a uraditi backup, i premestiti DB klaster direktorijum:
 +
 
 +
  su - postgres
 +
  pg_dumpall > pg_all.sql
 +
 
 +
  exit
 +
 
 +
  service postgresql-9.3 stop
 +
  mv /var/lib/pgsql/9.3 /var/lib/pgsql/9.3-old
 +
 
 +
Opisano u
 +
 
 +
   http://www.postgresql.org/docs/9.5/static/upgrading.html
  
 
Za upgrade servera treba koristiti Postgresov yum repozitorijum:
 
Za upgrade servera treba koristiti Postgresov yum repozitorijum:
  
   http://yum.pgsqlrpms.org/
+
   http://yum.pgrpms.org/reporpms/
  
Prateci linkove, nadjite repository RPM-a, na primer:
+
Prateci linkove, nađite repository RPM, na primer:
  
   http://yum.pgsqlrpms.org/reporpms/8.3/pgdg-centos-8.3-6.noarch.rpm
+
   https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-2.noarch.rpm
 +
  https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-i386/pgdg-centos95-9.5-2.noarch.rpm
  
Iako RPM ima oznaku verzije 8.3.6, on moze imati i noviju verziju, npr.  
+
  https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-x86_64/pgdg-centos95-9.5-2.noarch.rpm
8.3.7. Instalirajte RPM sa:
+
  https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-i386/pgdg-centos95-9.5-2.noarch.rpm
  
  wget http://yum.pgsqlrpms.org/reporpms/8.3/pgdg-centos-8.3-6.noarch.rpm
+
Instalirajte RPM sa:
  rpm -i pgdg-centos-8.3-6.noarch.rpm
+
  
Proverite da li se u /etc/yum.repos.d/ nalazi pgdg-83-centos.repo.  
+
  wget https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-x86_64/pgdg-centos95-9.5-2.noarch.rpm
Instalirajte javni kljuc za postgres:
+
  yum install pgdg-centos95-9.5-2.noarch.rpm
 +
  yum remove pgdg-centos93
 +
  yum remove pgdg-centos91
  
  wget http://yum.pgsqlrpms.org/RPM-GPG-KEY-PGDG
+
Proverite da li se u /etc/yum.repos.d/ nalazi pgdg-XX-centos.repo.
  rpm --import RPM-GPG-KEY-PGDG
+
Proveriti da nema viškova (9.1 i 9.3). Ako ima konflikta deinstalirati stari Postgres.
 
+
 
Isključite traženje Postgresa iz standardnog repozitorijuma tako što ćete
 
Isključite traženje Postgresa iz standardnog repozitorijuma tako što ćete
 
u fajlu /etc/yum.repos.d/CentOS-Base.repo na kraj sekcija [base] i  
 
u fajlu /etc/yum.repos.d/CentOS-Base.repo na kraj sekcija [base] i  
Line 170: Line 236:
 
   exclude=postgresql*
 
   exclude=postgresql*
  
Update-ujte postgres sa:
 
 
 
  yum update postgresql
 
  
Terebalo bi da je kreiran novi, prazan direktorijum /var/lib/pgsql/data.  
+
'''Za 9.5''', instalirajte postgres:
Proveriti. Kao korisnik postgres izvrsiti inicijalizaciju DB klastera:
+
 
 +
  yum install postgresql95-server
 +
 
 +
Terebalo bi da je kreiran novi, prazan direktorijum /var/lib/pgsql/9.3/data.  
 +
Proveriti. Kao korisnik root izvršiti inicijalizaciju DB klastera:
 +
 
 +
  service postgresql-9.5 initdb
  
  su - postgres
 
  initdb -D /var/lib/pgsql/data
 
  
 
Startovati Postgres service kao korisnik root:
 
Startovati Postgres service kao korisnik root:
  
   /etc/init.d/postogres start
+
   service postgresql-9.5 start
 +
 
  
 
Uraditi restore baze:
 
Uraditi restore baze:
  
   psql -d postgres -f ../pgsql-old-8.1/db_all.dump
+
  su - postgres
 +
   psql -d postgres -f pg_all.sql
  
 
Uraditi vacuum:
 
Uraditi vacuum:
  
 
   vacuumdb -az
 
   vacuumdb -az
 +
 
 +
  exit
  
 +
Ukljičiti novu verziju postgresa:
 +
 +
  chkconfig postgresql-9.3 off
 +
  chkconfig postgresql-9.5 on --levels 2345
 +
 
 
Podesiti postgresql.conf i pg_hba.conf. Podesiti iptables.
 
Podesiti postgresql.conf i pg_hba.conf. Podesiti iptables.
 +
 +
  su - postgres
 +
  mv 9.5/data/pg_hba.conf 9.5/data/pg_hba.conf.orig
 +
  cp 9.3/data/pg_hba.conf 9.5/data/pg_hba.conf
 +
  cp 9.5/data/postgresql.conf 9.5/data/postgresql.conf.orig
  
 
==Spoljašne veze==
 
==Spoljašne veze==
 
* [http://trac.biostr.washington.edu/trac/wiki/PostgreSql lista psql komandi]
 
* [http://trac.biostr.washington.edu/trac/wiki/PostgreSql lista psql komandi]

Latest revision as of 10:38, 26 July 2016

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox