PostgreSQL

From RCUB
Jump to: navigation, search
(Proceduralni jezici)
(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 90: Line 100:
  
 
Da biste omogućili pristup serveru preko JDBC-ja odnosno TCP/IP-ja,  
 
Da biste omogućili pristup serveru preko JDBC-ja odnosno TCP/IP-ja,  
potrebno je da u '''data/postgresql.conf''' (najčešće u /var/lib/psql) navedete:
+
potrebno je da u '''data/postgresql.conf''' (najčešće u /var/lib/pgsql) navedete:
  
 
   listen_addresses = '*'          # what IP address(es) to listen on;
 
   listen_addresses = '*'          # what IP address(es) to listen on;
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/
  
 +
Za postgres 9.0:
  
==Koriscenje proceduralinih jezika==
+
  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 111: Line 161:
  
 
   CREATE LANGUAGE plpgsql;
 
   CREATE LANGUAGE plpgsql;
 
  
 
==Backup i restore==
 
==Backup i restore==
Line 134: Line 183:
 
   vacuumdb -az
 
   vacuumdb -az
  
 +
==Upgrade major verzije==
 +
 +
Kod Postgresa su prve dve cifre oznaka major verzije, što znači da je
 +
npr. 9.2 major upgrade u odnosu na 9.1 i slično.
 +
 +
Major upgrade podrazumeva da je došlo do promene na strukturi podataka
 +
u fajl sistemu i da je potreban export/import prilikom upgrade-a.
 +
 +
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:
 +
 +
  http://yum.pgrpms.org/reporpms/
 +
 +
Prateci linkove, nađite repository RPM, na primer:
 +
 +
  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
 +
 +
  https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-x86_64/pgdg-centos95-9.5-2.noarch.rpm
 +
  https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-i386/pgdg-centos95-9.5-2.noarch.rpm
 +
 +
Instalirajte RPM sa:
 +
 +
  wget https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-5-x86_64/pgdg-centos95-9.5-2.noarch.rpm
 +
  yum install pgdg-centos95-9.5-2.noarch.rpm
 +
  yum remove pgdg-centos93
 +
  yum remove pgdg-centos91
 +
 +
Proverite da li se u /etc/yum.repos.d/ nalazi pgdg-XX-centos.repo.
 +
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
 +
u fajlu /etc/yum.repos.d/CentOS-Base.repo na kraj sekcija [base] i
 +
[updates] dodati liniju:
 +
 +
  exclude=postgresql*
 +
 +
 +
'''Za 9.5''', instalirajte postgres:
 +
 +
  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
 +
 +
 +
Startovati Postgres service kao korisnik root:
 +
 +
  service postgresql-9.5 start
 +
 +
 +
Uraditi restore baze:
 +
 +
  su - postgres
 +
  psql -d postgres -f pg_all.sql
 +
 +
Uraditi vacuum:
 +
 +
  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.
 +
 +
  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