Úvod
Databázových systémů (DBMS) je v GNU/Linuxu dostupných poměrně dost. Mezi ty nejznámější patří určitě MySQL, která se na webových serverech používá nejčastěji a jejíž základní zprovoznění bylo již v tomto seriálu probráno. Kromě MySQL existuje ovšem řada jiných možností, které mohou být pro různé typy použití lepší volbou, a zde nelze nepřehlédnout PostgreSQL, špičkovou open-source databázi šířenou pod BSD/MIT-like licencí, s dlouhou tradicí a velmi působivými vlastnostmi.
Samotným porovnáním obou DBMS se tento článek zabývat nebude, nicméně v odkazech pod ním naleznete články, které oba DBMS velmi podrobně srovnávají. Aby to nevypadalo, že v GNU/Linuxu existují pouze MySQL a Postgres, dodám také, že kromě těchto dvou DBMS existuje řada dalších, ať již open-source nebo proprietárních, běžících pod GNU/Linuxem. Více viz odkazy pod článkem nebo viz článek Srovnání databázových serverů zde na LinuxEXPRESu.
Instalace Postgresu
Instalace Postgresu v Debianu je triviální, postačí pouze nainstalovat příslušný balíček. Jedním možným problémem, alespoň u starších verzí Postgresu, bylo výchozí nastavení porovnávání (collation), které se obvykle nastavuje při inicializaci clusteru (příkaz initdb
), kterou Debian provádí automaticky při instalaci Postgresu a které zůstávalo v platnosti pro všechny následně vytvořené databáze bez možnosti nastavení změnit. Porovnávání určil instalační skript podle aktivního nastavení lokalizace. Od verze 8.4 již Postgres umožňuje nastavit porovnávání na úrovni jednotlivých databází, takže zde problém odpadá.
Pokud však instalujete starší verzi, dejte si pozor na nastavení locales před instalací Postgresu. V Debianu můžete toto nastavení změnit následujícím příkazem:
dpkg-reconfigure locales
Pokud jste již nainstalovali starší verzi, naplnili ji daty, začali používat a časem jste zjistili problém s nastavením porovnávání, nezbude vám nic jiného než provést export DB, znovu vytvořit cluster (provést initdb) a provést import.
Samotnou instalaci Postgresu provedete příkazem:
aptitude install postgresql
Upgrady Postgresu
Pokud budete nasazovat Postgres, měli byste vědět, jaký je doporučený postup ohledně jeho aktualizací. Postgres využívá schéma verzování ve tvaru x.y.z
, kde x.y
, tedy první dvě čísla verze, náleží tzv. hlavní (major) verzi, zatímco číslo z
udává vedlejší (minor) verzi. Formát uložení dat by se v rámci hlavní (major) verze neměl měnit, tudíž, budete-li aktualizovat v rámci jedné hlavní verze, stačí aktualizovat příslušný balíček a je hotovo. Pokud však aktualizujete z jedné hlavní verze na jinou, tedy např. z 8.4 na 9.0, měli byste postupovat následovně:
proveďte zálohu (dump) všech databází (příkaz
pg_dumpall
)zastavte běh staré verze serveru
nainstalujte novou verzi Postgresu, incializujte cluster (příkaz initdb), pokud to za vás instalační skripty balíčku neprovedou (v Debianu to dělat nemusíte)
zprovozněte a nastartujte novou verzi Postgresu
importujte data ze zálohy
Postgres 9.0 v Debianu Squeeze
Pokud používáte nově vydaný Debian Squeeze, pak asi víte, že v repozitářích je k dispozici Postgres řady 8.4, nicméně „na trhu” je již dostupná řada 9.0, která přináší řadu zajímavých novinek (soupis je zde). Od toho tu máme projekt Debian Backports, nyní již oficiální součástí Debianu, který nabízí nové verze balíčků portované pro stabilní vydání. Více viz stránky projektu.
Vytváření uživatelů a databází
V MySQL je databázový administrátor „root“, stejně jako v unixových systémech. V Postgresu se účet správce jmenuje „postgres“. Jelikož tento účet vyžaduje po instalaci přístup s heslem, které nemáte k dispozici, musíte si pomoci jinak - staňte se systémovým, tedy unixovým uživatelem „postgres“, který má veškerá oprávnění k DBMS. Pokud máte práva roota, můžete tuto operaci provést následujícím příkazem:
su postgres -
Jako uživatel „postgres“ můžete nyní vytvářet databáze a uživatele pomocí příkazů createuser
a createdb
. Můžete začít vytvořením uživatele, který bude vlastnit následně vytvořenou databázi. Řekněme, že chcete vytvořit uživatele „michal“, takže zapíšete následující příkaz:
createuser -P michal
Budete vyzváni k zadání hesla, a poté budete dotázáni na tři podstatné věci - zdali má mít nově vytvořená role (tj. uživatel) administrátorská oprávnění (doporučuji odpovědět ne), zdali má mít právo vytvářet databáze (opět doporučuji odpovědět ne) a konečně, zdali má mít právo vytvářet nové role (rovněž doporučuji odpovědět ne).
Nyní zbývá vytvořit databázi, kterou bude vlastnit nově vytvořený uživatel. Řekněme, že tato databáze se bude jmenovat „faktury“. K vytvoření databáze využijete příkaz createdb
:
createdb faktury -O michal
Tento příkaz vytvoří databázi „faktury“ s vlastníkem (-O
) „michal“. Budete-li chtít jednoznačně specifikovat české porovnávání a kódování UTF-8, použijete o něco komplikovanější příkaz:
createdb faktury --locale cs_CZ.UTF8 -O michal -T template0
V tomto příkazu asi není na první pohled jasné použití parametru -T
, který specifikuje šablonu použitou při vytvoření databáze. Postgres využívá v základu dvě databázové šablony, template0
a template1
. Šablona je ve své podstatě databáze s nějakým základním obsahem, který se zkopíruje do vámi vytvořené nové databáze. Smysl více šablon spočívá v tom, abyste po úpravách jedné šablony měli stále k dispozici „čistou“ šablonu pro vytvoření databáze bez vámi provedených úprav. Šablona template1
je určena k úpravám, a proto je také automaticky použita při vytváření nové databáze (viz předchozí příkaz, kde parametr „-T“
nebyl specifikován, tudíž byla použita šablona template1
). Chcete-li si pro svou databázi vynutit vlastní porovnávání, budete muset použít jako šablonu právě template0
.
Postgres a webové aplikace
Na závěr článku jen zmíním, jak je to s Postgresem a webovými aplikacemi, které byste chtěli nasadit. Velká rozšířenost MySQL v této oblasti, spolu s rozdíly mezi oběma DBMS, má za následek řadu projektů, které fungují pouze s MySQL, a ne s Postgresem. Z velmi známých CMS je to třeba Joomla!, naopak její velký konkurent Drupal na Postgresu funguje. Jak jsem sám procházel seznamy CMS a webových aplikací, podpora Postgresu není ani mizivá, ale ani široká.
Aby Postgres s webovými aplikacemi pracoval, budete nejspíše potřebovat příslušný databázový adaptér pro jazyk, ve kterém je příslušná webová aplikace napsána. V případě PHP je potřeba nainstalovat balíček php5-pgsql
:
aptitude install php5-pgsql