====== PostgreSQL ======
PostgreSQL je plnohodnotným relačním databázovým systémem s otevřeným zdrojovým kódem. Má za sebou více než patnáct let aktivního vývoje a má vynikající pověst pro svou spolehlivost a bezpečnost. Běží na všech rozšířených operačních systémech včetně Linuxu, UNIXů (AIX, BSD, HP-UX, SGI-IRIX, Mac OS X, Solaris, Tru64) a Windows.
PostgreSQL je šířen pod BSD licencí, která je nejliberálnější ze všech open source licencí. Tato licence umožňuje neomezené používání, modifikaci a distribuci PostgreSQL. PostgreSQL je možno šířit se zdrojovými kódy nebo bez nich, zdarma nebo komerčně. ([[http://cs.wikipedia.org/postgreSQL|Wikipedie - PostgreSQL]])
====== Instalace ======
Následujícím příkazem nainstalujeme všechny balíky potřebné k běhu databázového serveru PostgreSQL:
sudo apt-get install postgresql postgresql-contrib
A pokud chceme databázi propojit se serverem Apache, případně jazykem PHP:
sudo apt-get install php5-pgsql libapache2-mod-auth-pgsql
Instalace je skutečně takto jednoduchá, ale databáze ještě není použitelná. Musíme jí nejprve nakonfigurovat.
Pokud bychom nechtěli instalovat z balíčků, můžeme si aplikaci stáhnout zde: [[http://ftp2.cz.postgresql.org/pub/postgresql/]]
===== Chyba při instalaci =====
Pokud instalace skončí chybou kde je v hlášce uvedeno:
unsafe permissions on private key file "server.key"
Pak asi nejspíše pomůže, dále uvedený příkaz a nová instalace:
/etc/ssl$ sudo make-ssl-cert generate-default-snakeoil --force-overwrite
====== Konfigurace ======
===== Základní konfigurace =====
Při instalaci nám vznikl v systému nový uživatel s názvem postgres. Tento uživatel je nastaven jako defaultní uživatel databáze PostrgeSQL, čili první přihlášení provedeme přes něj. Abychom se ale mohli přihlásit, potřebujeme znát heslo k uživateli postgres. Toto heslo však není nastaveno, a proto si ho nastavíme:
sudo passwd postgres #Změní heslo
sudo service postgresql restart #Restartuje server
Teď již známe přihlašovací jméno a heslo a můžeme se tedy poprvé přihlásit.
===== První přihlášení =====
Pro první přihlášení použijeme následující příkaz:
su postgres #Přihlášení jako administrátor databáze Postgres
Určitě bychom chtěli, abychom se mohli přihlašovat naším uživatelským jménem a heslem a k tomu samozřejmě potřebujeme všechna práva a svoji databázi. Uděláme to takto:
$ sudo adduser uzivatelske_jmeno_noveho_uzivatele #Zadáváme pouze pokud uživatel v systému ještě neexistuje!
$ createuser uzivatelske_jmeno #Vytvoří nového uživatele
$ createdb uzivatelske_jmeno #Vytvoří novou databázi
Po zadání příkazu createuser budeme muset odpovědět na otázku:
* Chcete, aby uživatel byl superuživatel?
Jelikož vytváříme svůj účet, tak samozřejmě odpovíme 'a'. Pokud budeme chtít vytvořit jiného uživatele, pak již záleží na nás, co mu dovolíme dělat.
===== Samotná konfigurace =====
V tuto chvíli databázový server sice běhá, ale každý si může vytvořit tabulku v libovolné databázi. To je způsobeno tím, že při vytváření tabulky defaultně vznikne schéma public, do kterého mohou zapisovat všichni uživatelé. To určitě není dobré, a proto to zakážeme. Můžeme to udělat třeba tak, že smažeme schéma public a nahradíme ho vlastním, ale to není úplně ono, a proto to zkusíme přes konfigurační soubor pg_hba.conf:
sudo gedit /etc/postgresql/8.3/main/pg_hba.conf #Otevře konfigurační soubor
Měli bychom na konci souboru dostat podobný výpis:
# Database administrative login by UNIX sockets
local all postgres ident sameuser
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident sameuser
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Teď upravíme konec souboru třeba takto:
# Database administrative login by UNIX sockets
local all jmeno_superuzivatele ident sameuser
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local sameuser all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Změnili jsme jméno superuživatele, který má právo ke všem databázím. Dále jsme řekli, že se všichni uživatelé z jedné domény mohou přihlásit pouze ke své databázi.
Teď už jenom restartujeme server:
sudo service postgresql restart
====== PostgreSQL klienti ======
===== Psql =====
Základní řádkový klient k databázovému serveru PostgreSQL je nainstalován přímo jako závislost (postgres-client) balíku postgres (přesněji jako závislost balíku postgres-8.3, který je závislostí metabalíku postgres).
Základní příkazy:
jmeno_databaze=# \q #Ukončí klienta
jmeno_databaze=# \s #Vypsání historie příkazů
jmeno_databaze=# \i [SOUBOR] #Provedení příkazů ze souboru
jmeno_databaze=# \d #Zobrazení tabulek v databázi
jmeno_databaze=# \d tabulka #Zobrazí strukturu tabulky
jmeno_databaze=# \z #Zobrazení práv pro tabulky
jmeno_databaze=# \? #Zobrazení PSQL příkazů
jmeno_databaze=# \h #Zobrazení SQL dotazů
Příkazů je samozřejmě víc, ale tyto by pro začátek měly stačit.
==== Základní komunikace s databází ====
Po nainstalování klienta můžeme konečně začít plně využívat naši databázi. Začneme tak, že se přihlásíme do své databáze.
psql
Pokud bychom se chtěli přihlásit k jiné databázi, než je naše uživatelské jméno, pak to provedeme takto.
psql jmeno_databaze
Teď jsme ve své databázi a můžeme konečně vytvářet SQL dotazy. Můžeme si tedy konečně nastavit heslo do databáze.
jmeno_databaze=# ALTER USER uzivatel with password 'heslo'; #Změna hesla
Pokud jsme vytvořili databázi obyčejnému uživateli, nesmíme zapomenout mu ji také přiřadit:
jmeno_databaze=# ALTER DATABASE jmeno_databaze OWNER TO novy_vlastnik;
Pokud bylo zapsáno vše v pořádku, mělo by se objevit hlášení o provedení příkazu. Pokud se neobjeví, nastala někde chyba. Nejčastější chybou je vynechání středníku na konci dotazu.
===== PhpPgAdmin =====
Tato aplikace slouží ke grafické administraci databáze PostgreSQL přes webové rozhraní. Instalace probíhá následovně(předpokládá se, že je nainstalováno PHP a Apache):
sudo apt-get install phppgadmin #Nainstaluje PhpPgAdmin z repozitářů
sudo ln -s /etc/phppgadmin/apache.conf /etc/apache2/conf.d/phppgadmin.conf #Vytvoří symlink
==== Problémy s PhpPgAdminem ====
Pokud nám je při spuštění hlášena nějaká chyba, zkusíme toto:
sudo gedit /usr/share/phppgadmin/conf/config.inc.php #otevře soubor
a změníme:
$conf['extra_login_security'] = true;
na:
$conf['extra_login_security'] = false;
restartujeme apache:
sudo service apache2 reload
Pokud ani teď nejsme úspěšní a hlásí nám to chybu kódování, jedná se o bug, který spravíme následovně:
sudo gedit /usr/share/phppgadmin/libraries/lib.inc.php #Otevře soubor
Toto:
$PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES,$lang['appcharset']);
nahradíme za:
$PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES,'ISO-8859-1');
**Pokud se vyskytnou problémy s nedostupností PhpPgAdmin přes [[http://localhost/phppgadmin]], nejjednodušším řešením je vytvořit symlink:**
sudo ln -s /usr/share/phppgadmin /var/www/phppgadmin
====== Práva ======
Přidělení práv danému uživateli:
jmeno_databaze=# GRANT INSERT ON tabulka TO uzivatel; #Vytvoří právo uživateli uzivatel vkládat do tabulky tabulka
Odebrání práv:
jmeno_databaze=# REVOKE prikaz ON seznam FROM uzivatel;
Můžeme také přidělovat jstá práva při vytváření uživatele:
jmeno_databaze=# CREATE USER uzivatel WITH CREATEDB CREATEUSER; #Uživatel může vytvářet databáze a uživatele
Přidělování vlastnictví:
ALTER DATABASE jmeno_databaze OWNER TO uzivatel; #Přidělovat můžeme rovněž tabulky nebo schémata
O právech se také hovořilo v souvislosti s konfiguračním souborem pg_hba.conf.
====== Klady, zápory a zajímavosti ======
Klady:
* Stabilita
* Rychlost
* "Neokoukanost" - Tím, že jí málo lidí používá, nebývá tolik přetěžována.
* Dostupnost - Podporuje jí hodně hostingů.
* Nenašel jsem žádné zápory - Databázi mám sice poměrně krátce, ale ani na internetu jsem nenašel žádné nespokojené uživatele.
Zajímavosti:
* Datový typ **Serial** (inkrementace) - Jedná se vlastně o datový typ //Integer//, ale automaticky je vytvořena sekvence, což umožňuje automatickou inkrementaci.
* **Limit** a **Offset** (limit výstupů) - Jedná se o omezení výstupních dat, které není standardem pro každou databázi (Třeba Oracle nic podobného nemá).
* **Schémata** - Další příjemná věc, která nám umožňuje mít v tabulkách ještě větší přehled. Tabulky můžeme rozdělit do různých skupin (Schémat) a tím pádem nemusí být hned důvod zakládat pro další projekt jinou databázi.
====== Odkazy ======
* [[http://www.mangui.e-blog.cz/index.php?clanek=4|PostgreSQL - Stáhnutí, instalace, konfigurace a připojení (na Linuxu)]]
* Autor návodu: [[http://www.mangui.e-blog.cz|mangui]]
{{page>úpravy/konvence}}