PostgreSQL

From RCUB
Jump to: navigation, search

Contents

JDBC parametri konekcije za PostgreSQL

JDBC connection string je oblika:

 jdbc:postgresql://server.rcub.bg.ac.rs/baza

Default port je 5432, a drajver je:

 org.postgresql.Driver

Hijerarhija

Hijerarhija u Postgresu je baza, šema, tabela. JDBC string za konekciju prima kao parametar samo ime baze, a ne i šemu. Tako da je verovatno najlakše kreirati posebne baze i koristiti njihove default "public" šeme.

Instalacija putem YUM managera

Potrebne informacije su ovde.

PSQL komande

psql je linux konzolni SQL klijent. Pokretanje iz klijenta kao root će vam verovatno prouzrokovati poruku o grešci

psql: FATAL:  database "root" does not exist

Jer psql pokusava da otvori bazu koja ima isti naziv kao i korisnik, a koja ne postoji. Zbog toga je potrebno prvo se prebaciti na korisnika postgres sa

 su - postgres

i zatim pozvati psql.

Komande koje vam mogu biti od interesa:

\l - listanje baza podataka
\c - izbor aktivne baze podataka
\dn - listanje svih sema u izabranoj bazi
\dt - listanje svih tabela
\du - listanje svih korisnika

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.


Kreiranje korisnika:

CREATE USER username PASSWORD 'l0zinka';

Izbor baze:

\c test_baza

Dodeljivanje privilegija nad default "public" šemom.

GRANT ALL ON SCHEMA public TO username;

Alternativa kreiranju korisnika koji pristupa public šemi, je kreiranje istoimene šeme i korisnika sa

CREATE SCHEMA AUTHORIZATION username

čime će biti kreirana šema username nad kojom korisnik username po defaultu ima sve privilegije (nije potreban grant).

Kratka myslq -> psql tabela

MySQL mysql PostgreSQL psql
SHOW COLUMNS; \d table-name
SHOW DATABASES; \l
SHOW PROCESSLIST; SELECT * FROM pg_stat_activity;
SHOW TABLES; \d
SHOW USERS; \du
USE db-name; \c db-name

[1]

Konfigurisanje servera

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/pgsql) navedete:

 listen_addresses = '*'          # what IP address(es) to listen on;
 port = 5432                     # (change requires restart)

i da u data/pg_hba.conf dodate:

 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 host    mydb        ognjen      147.91.4.123/32       md5

posle promena na kofiguracionim fajlovima potrebno je da restartujete server ili da kao korisnik postgres pozovete reload konfiguracije:

 sudo -u postgres pg_ctl reload -D /var/lib/pgsql/data/

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 Optimization Guide. Poglavlje Tuning se najviše tiče optimizovanja svakodnevnog rada servera i objašnjava sve tajne postgres.conf. Jedan od interesatnih članaka je ovde a postoji i cela 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:

postgres.conf
8.3 def 1GB 16GB komentar
max_connections 100 30 30 proceniti koliko je konekcija zaista potrebno i dodati neku rezervu
shared_buffers 32MB 256MB 4096MB treba RAM/4
effective_cache_size 1000 128MB 10240MB treba RAM/2, mada može i do RAM*3/4
chekpoint_segments 3 15 15 minimum 10 ako je write intensive aplikacija može i 32
checkpoint_completion_target 0.5 0.9 0.9 uvek se povećava na 0.9 kada se povećeva chekpoint_segments
default_statistics_target 10 100 100 uvek na 100
work_mem 1MB 4MB 40MB obratiti pažnju da max_connections*work_mem bude manji od npr. RAM/8

Slične rezultate moguće je dobiti i ovim odličnim online kalkulatorom za podešavanja PostgreSQL-a online kalkulatorom za podešavanja PostgreSQL-a.

Koriscenje proceduralnih jezika

PostgreSQL podrzava vise proceduralnih jezika: PL/pgSQL, PL/Tcl, PL/Perl, PL/Python. Uključivanje podrške za odgovarajući jezik na nivou baze podataka se radi sa, npr:

 CREATE LANGUAGE plpgsql;

Backup i restore

Backup celog DB klastera (dakle svih baza podataka) radi lokalni korisnik 'postgres' direktno na serveru sa:

 pg_dumpall > db.dump

Restore dumpa baze podataka radi na sveze instaliranom postgresu tj. sveze inicijalizovanom DB klasteru [1] lokalni korisnik 'postgres':

 psql -f db.dump postgres

Ukoliko za restore nije na raspolaganju sveze instaliran Postgresa, tj. sveze inicijalizovan klaster, vec na primer treba uraditi restore posto je klaster ostecen (corrupted), onda je procedura sledeca:

  1. Bekapovati fajlove pg_hba.conf i postgresql.conf iz DB klaster direktorijuma (najcesce /var/lib/pgsql/data).
  2. Obrisati ceo DB klaster direktorijum.
  3. Inicijalizovati DB klaster.
  4. psql -f db.dump postgres

Nakon restore-a DB klastera pametno je da se update-uju statistike sa:

 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

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox