PostgreSQL
From RCUB
(create schema) |
(→Upgrade major verzije) |
||
Line 3: | Line 3: | ||
JDBC connection string je oblika: | JDBC connection string je oblika: | ||
− | jdbc:postgresql://server.rcub.bg.ac. | + | 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. | ||
− | |||
Kreiranje korisnika: | Kreiranje korisnika: | ||
Line 48: | Line 58: | ||
Izbor baze: | Izbor baze: | ||
− | \c | + | \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/ | + | 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 103: | Line 113: | ||
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: | ||
+ | |||
+ | 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. | ||
+ | Uključivanje podrške za odgovarajući jezik na nivou baze podataka se radi sa, npr: | ||
+ | |||
+ | CREATE LANGUAGE plpgsql; | ||
==Backup i restore== | ==Backup i restore== | ||
Line 120: | Line 178: | ||
# Inicijalizovati DB klaster. | # Inicijalizovati DB klaster. | ||
# psql -f db.dump postgres | # 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== | ==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] |