View source
From RCUB
for
PostgreSQL
Jump to:
navigation
,
search
==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 [http://yum.pgsqlrpms.org/index2.php 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=== {| class="wikitable" border="1" style="background:#F3F3F3" |- ! MySQL <code>mysql</code> ! PostgreSQL <code>psql</code> |- | <code>SHOW COLUMNS;</code> | <code>\d ''table-name''</code> |- | <code>SHOW DATABASES;</code> | <code>\l</code> |- | <code>SHOW PROCESSLIST;</code> | <code>SELECT * FROM pg_stat_activity;</code> |- | <code>SHOW TABLES;</code> | <code>\d</code> |- | <code>SHOW USERS;</code> | <code>\du</code> |- | <code>USE ''db-name'';</code> | <code>\c ''db-name''</code> |} [http://trac.biostr.washington.edu/trac/wiki/PostgreSql] ==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 [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 |} ==Koriscenje proceduralinih 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: # Bekapovati fajlove pg_hba.conf i postgresql.conf iz DB klaster direktorijuma (najcesce /var/lib/pgsql/data). # Obrisati ceo DB klaster direktorijum. # Inicijalizovati DB klaster. # 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: pg_dumpall > pg_all.sql /etc/rc.d/init.d/postgresql stop /etc/rc.d/init.d/postgresql-9.1 stop mv /var/lib/pgsql /var/lib/pgsql.old Opisano u http://www.postgresql.org/docs/9.2/static/upgrading.html Za upgrade servera treba koristiti Postgresov yum repozitorijum: http://yum.pgrpms.org/reporpms/ Prateci linkove, nađite repository RPM, na primer: http://yum.pgrpms.org/9.2/redhat/rhel-5-x86_64/pgdg-centos92-9.2-6.noarch.rpm http://yum.pgrpms.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm http://yum.pgrpms.org/9.1/redhat/rhel-5-x86_64/pgdg-centos91-9.1-4.noarch.rpm http://yum.pgrpms.org/9.1/redhat/rhel-5-i386/pgdg-centos91-9.1-4.noarch.rpm http://yum.pgrpms.org/9.0/redhat/rhel-5-x86_64/pgdg-centos90-9.0-5.noarch.rpm http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/pgdg-centos90-9.0-5.noarch.rpm http://yum.pgrpms.org/8.4/redhat/rhel-6-x86_64/pgdg-centos-8.4-3.noarch.rpm http://yum.pgrpms.org/8.4/redhat/rhel-6-i386/pgdg-centos-8.4-3.noarch.rpm Instalirajte RPM sa: wget http://yum.pgrpms.org/9.2/redhat/rhel-5-x86_64/pgdg-centos92-9.2-6.noarch.rpm rpm -i pgdg-centos-9.0-2.noarch.rpm Proverite da li se u /etc/yum.repos.d/ nalazi pgdg-XX-centos.repo. Obrisati viškove. Na primer, ako se radi migracija sa 9.1 na 9.2 moguće je da već postoji stari pgdg-91-centos.repo koga treba obrisati. Ako ima konflikta deinstalirati stari Postgres. '''Samo za upgrade na 8.x''', instalirajte javni ključ za Postgres: wget http://yum.pgsqlrpms.org/RPM-GPG-KEY-PGDG rpm --import RPM-GPG-KEY-PGDG 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 8.x''', update-ujte postgres sa: yum update postgresql '''Za 9.2''', instalirajte postgres: yum install postgresql92-server Terebalo bi da je kreiran novi, prazan direktorijum /var/lib/pgsql/9.2/data. Proveriti. Kao korisnik root izvršiti inicijalizaciju DB klastera: Za 9.2: service postgresql-9.2 initdb Za 8.x: su - postgres initdb -D /var/lib/pgsql/data Startovati Postgres service kao korisnik root: exit /etc/init.d/postgresql-9.2 start /etc/init.d/postgresql start Uraditi restore baze: su - postgres psql -d postgres -f ../pgsql.old/pg_all.sql Uraditi vacuum: vacuumdb -az Podesiti postgresql.conf i pg_hba.conf. Podesiti iptables. Pri prelasku sa 8.3 na 8.4 često se može koristiti isti postgres.conf, samo treba izaciti parametar max_fsm_pages. ==Spoljašne veze== * [http://trac.biostr.washington.edu/trac/wiki/PostgreSql lista psql komandi]
Return to
PostgreSQL
.
Personal tools
Log in
Namespaces
Page
Discussion
Variants
Views
Read
View source
View history
Actions
Search
Navigation
Main page
Community portal
Current events
Recent changes
Random page
Help
Toolbox
What links here
Related changes
Special pages