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ě. (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
Konvence: Tento návod nesplňuje některé z na Wiki zavedených konvencí. Více...