PostgreSQL + PHP na Mandrake 10.0

V tomto článku se dozvíte, jak si nastavit na svém počítači databázový server PostgreSQL.

8.4.2004 08:00 | Pavel Kácha | přečteno 9252×

V dnešní době jsou databáze hojně využívány pro ukádání dat, ze kterých se generují webové stránky - nezáleží zda jde jen o jednoduchou knihu náštěv nebo o internetový obchod. V oblasti dynamicky generovaných stránek je dnes prakticky dominantni PHP v kombinaci s nějakým databázovým serverem. Většinou to bývá MySQL nebo právě PostgreSQL. A tom, jak nastavit PostgreSQL, abychom si doma mohli vyzkoušet, jak naše stránky fungují, si řekneme v tomto článku. Jelikož nejrozšířenější distribucí v ČR je Mandrake a navíc je (stejně jako tento článek) určen pro začínající uživatele, budu se při výkladu opírat právě o tuto distribuci - konkrétně o verzi 10.0. Pokud používáte jinou distribuci, nevadí, veškerá nastavení budou obdobná, jen se možná někde budou lišit adresáře, kde budou konfigurační soubory uloženy.

Co je to PostgreSQL, jaké má výhody?

PostgreSQL je relační databázový systém, který vznikl na univerzitě v Berkeley a je odvozen ze svého předchůdce POSTGRES. Mnoho lidí používá PostgreSQL raději než další velice rozšířený databázový systém MySQL. Důvodem pro to může být například podpora transakcí (pro ty, kteří nevědí co si pod pojmem transakce představit, uvedu, že transakce je funkce databáze, která dovolí provést několik závislých operacích v jednom bloku příkazů a pokud by nějaký příkaz vedl k chybě, příkazy se zruší a na databázi se neprojeví žádné změny), subselekty, náhledy, tiggery a komplikované blokády. Další výhodou může být licence, pod kterou je PostgreSQL distribuován (jde o Open Source software s licenčními podmínkami BSD), ta totiž říká, že PostgreSQL může být použit i pro komerční využití zcela zdarma (pozn.: u MySQL byste si v takovémto případě měli zakoupit licenci.) Posledním faktorem je i to, že PostgreSQL považuje mnoho lidí za rychlejší při práci s velkými tabulkami. O to se ale vedou časté spory a není mým cílem řešit tento spor.

Co si nainstalovat

Takže máme nainstalovaný Mandrake 10.0, při instalaci jsme nezapomněli vybrat webový server Apache, balíčky s PHP a PostgreSQL a nic nám nebrání začít konfiguraci. Pro jistotu přidávám výpis balíčků, které budeme potřebovat nebo je alespoň dobré je mít nainstalované: apache2-2.0.48-5mdk, apache2-mod_php-2.0.48_4.3.4-1mdk, apache2-common-2.0.48-5mdk, apache2-modules-2.0.48-5mdk, apache2-mod_php-2.0.48_4.3.4-1mdk, php-pgsql-4.3.4-1mdk, php432-devel-4.3.4-3mdk, libphp_common432-4.3.4-3mdk, php-cgi-4.3.4-3mdk, postgresql-contrib-7.4.1-2mdk, postgresql-docs-7.4.1-2mdk, postgresql-server-7.4.1-2mdk, postgresql-test-7.4.1-2mdk, postgresql-7.4.1-2mdk, pgaccess-0.98.8.20030520-1mdk

1. krok - vytvoření uživatele

Nejdříve si vytvoříme uživatele databázového systému, kterého budeme používat pro přístup k databázi, a nastavíme mu heslo a práva. Můžeme to provést dvojím způsobem buď pomocí speciálního programu nebo pomocí jazyka SQL. Ukážeme si oba způsoby.

Pro vytváření uživatelů musíte být přihlášeni jako "správce" databáze. Databáze PostgreSQL má pro svou správu v systému speciální účet s názvem postgres. Otevřete si terminál a nejdříve se přihlašte jako root (příkazem su), poté si znovu změníme identitu na uživatele postgres (příkazem su postgres). Teď je ten pravý čas, abychom se rozhodli jakým způsobem chceme uživatele vytvořit. Pokud jste se rozhodli využít uživatelsky přítulnější program, zadejte createuser a program se vás zeptá jak se má nový uživatel jmenovat, zda může vytvářet databáze a další uživatele. Program defaultně vytváří účty bez hesla, ale pokud použijete přepínač -W, zeptá se vás program i na heslo nového uživatele (jak je v Linuxu dobrým zvykem, tak ani tady se při psaní hesla nic nevypisuje na obrazovce). Výpis programu může vypadat například takto:

bash-2.05b$ createuser -W
Vložte jméno nového uživatele: pavel_db
Měl by mít nový uživatel právo vytvářet databáze? (y/n) y
Měl by mít nový uživatel právo vytvářet další nové uživatele? (y/n) y
Heslo: 
CREATE USER

Pokud navolíte něco špatně není žádný problém uživatele odstranit, stačí na to příkaz dropuser.

Teď se podíváme na vytvoření uživatele pomocí jazyka SQL, slouží k tomu příkaz CREATE USER <uzivatelske_jmeno>, kde místo <uzivatelske_jmeno> zadáte požadované uživatelské jméno. Jako další parametry můžete přidat CREATEDB nebo CREATEUSER. Tyto parametry znamenají, že uživatel může vytvářet databáze, resp. další uživatele. Můžete nastavit i PASSWORD <heslo>. Pro zadávání příkazů jazyka SQL máte nainstalovaný interaktivní terminál psql. Tento program vyžaduje jako argument jméno databáze, může běžet jen pokud je připojen k nějaké databázi. Pokud nazadáte žádný argument pokusí se psql připojit k databázi, jejíž jméno bude shodné s jménem právě přihlášeného uživatele - v tomto případě by to tedy byla databáze postgres, která ale neexistuje, proto se přihlášení nezdaří.

Při instalaci PostgreSQL se vám vytvoří dvě základní databáze template0 a template1. template1 se používá jako předloha pro všechny vytvářené databáze. Veškerá nastavení, která nebudou nastavena při vytváření databáze se nastaví podle template1. K databázi template0 se nelze připojit, protože slouží jako záložní vzorová databáze. Pokud byste omylem poškodili nebo zničili databázi template1, použije se jako šablona právě databáze template0.

Z předchozího odtavce je jasné, že pro spuštění terminálu psql je nutné zadat psql template1. Pokud chcete vytvořit uživatele stejného jako v předchozím příkladu napište

CREATE USER pavel_db PASSWORD 'tajne_heslo' CREATEDB CREATEUSER;

psql má k interním príkazům kvalitní nápovědu v češtině, takže myslím není nutné se tu příliš rozepisovat. Možná jen několik základních příkazů:

\z nebo \dp -- seznam tabulek a přístupových práv
\l -- seznam všech databází
\du -- seznam uživatelů databáze
\g <soubor> -- ukončení příkazu SQL a přesměrování výstupu do <souboru>

K příkazům SQL je přístupná obsáhlá nápověda v angličtině. Stačí zadat \h pro vypsání všech příkazů SQL. Pokud chcete nápovědu ke konkretnímu příkazu napište \h <prikaz> napr.: \h INSERT.

2. krok - nastavení připojení

Nyní si nastavíme, jaká připojení bude PostgreSQL akceptovat (z jakého počítače je možné se připojit, kdo je oprávněn a k čemu). Toto nastavení proveďte v souboru pg_hba.conf (pro jeho editaci musíte být přihlášeni jako root), který (v Mandraku 10.0) najdete v adresáři /var/lib/pgsql/data. Všechna pravidla, podle kterých se budou uživatelé přihlašovat se vpisují jako jednotlivé řádky ve formátu:

<typ_pripojeni>   <databaze>   <uzivatel>   <IP_adresa>   <maska>   <druh_autorizace>

Pokud si chcete vyzkoušet práci s PostgreSQL na svém domácím počítači nebo otestovat stránky před tím než je odešlete na vzdálený databázový server, budete nejspíše chtít, aby bylo možné se připojit k databázi jen z vašeho počítače (localhost), nejlépe pro všechny uživatele a aby bylo možné využívat všechny databáze. Není nic jednoduššího, stačí přidat tento řádek

host   all   all  127.0.0.1     255.255.255.255   trust

Váš počítač jste specifikovali podle jeho IP adresy (127.0.0.1) a masky (255.255.255.255), připojit se mohou všichni uživatelé (all) a mohou využívat všechny databáze (all). Všechny volby, které se dají při nastavování spojení využít, jsou popsané v souboru pg_hba.conf.

Všechno už je připraveno a stačí jen přikázat systému PostgreSQL, aby naslouchal na portu 5432 a byl připravený ke komunikaci přes protokol TCP/IP. Opět existují dvě možnosti. Nejdříve předvedu složitější postup, kterým ale můžete poškodit systém, a proto ho rozhodně nedoporučuji uživatelům, kteří přesně nevědí, co dělají. Aby PostgreSQL přijímal TCP/IP spojení, musí startovat s parametrem -i. Tento přepínač můžete natvrdo dopsat do startovacího scriptu postgresql, který najdete v adresáři /etc/rc.d/init.d/. Parametr -i musíte vepsat do řádky 157, kde dochází ke startu PostgreSQL a nastavení přiděleného portu (výchozí je port 5432). Po zásahu bude tedy tento řádek vypadat takto (přidaný parametr je značen tučně):

su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl  -D $PGDATA -p /usr/bin/postmaster \ 
-o '-i -p ${PGPORT}' start > /dev/null 2>&1" < /dev/null

A teď je čas na druhý, mnohem jednodušší způsob. Jediné, co musíte udělat, je změnit hodnotu proměnné tcpip_socket v souboru /var/lib/pgsql/data/postgresql.conf na true. Opět musíte být přihlášen jako root. Po úpravě bude řádek vypadat takto:

tcpip_socket = true

Zkontrolujte si, že je služba postgresql spuštěna (obrázek 1) - MandrakeControlCenter -> Systém -> Služby, případně ji spusťte, a můžete se připojit. K našemu prvnímu připojení můžeme použít program pgaccess  (najdete ho v menu More Aplications -> Databáze). Z hlavního menu vybereme Databáze -> Otevřít a objeví se nám okno, pro zadání údajů pro připojení. Pokud jste postupovali přesně podle tohoto návodu vyplňte políčka takto (obrázek 2). Pokud se vám nyní neobjevila žádná chyba, máte na svém počítači správně nainstalovaný PostgreSQL.

Poznámka o kódování

PostgreSQL, který jste si nainstalovali z rpm balíčků Mandrake, má bohužel chybně nastavené kódování, přesněji řečeno chybně, pokud chcete používat češtinu a ne cestinu. Abyste ale mohli využívat všech krás našeho mateřského jakyka (omlouvám se čtenářům ze Slovenska :)), používejte při tvorbě nových databází volbu ENCODING. Pokud chcete, aby databáze měla uvedeného jiného vlastníka než toho, pod kterým jste právě přihlášeni, použijte volbu WITH OWNER. Příkaz může vypadat třeba takto (jen podotýkám, že jde o příkaz jazyka SQL, proto ho zadávejte v prostředí psql):

CREATE DATABASE pokus WITH OWNER pavel_db ENCODING='iso8859-2';

Pohodlnější práce pomocí phpPgAdmin

Jestliže jste dosud pracovali s databází MySQL, znáte nejspíš grafické rozhraní phpMyAdmin, které vám umožní spravovat databáze přes webový prohlížeč. Obdobný systém existuje i pro PostgreSQL. Jmenuje se phpPgAdmin a podrobnější informace o něm najdete i na stránkách linuxsoftu.

Po stažení rozbalte soubor do adresáře ~/public_html. Všechny scripty se uloží do adresáře ~/public_html/phpPgAdmin. Opět je nutné provést alespoň základní nastavení, k tomu slouží soubor ~/public_html/phpPgAdmin/conf/config.inc.php. Tady nastavte jazyk, ve kterém chcete systém ovládat, k tomu slouží proměnná $conf['default_lang'], které nastavíte nejspíš hodnotu 'czech'. Nyní najděte proměnnou $conf['servers'][0]['desc'], ve které nastavujete jméno serveru, pod kterým se bude zobrazovat v přihlašovací nabídce. Další proměnnou je $conf['servers'][0]['host'], která určuje adresu serveru, hodnotu nastavte na localhost. Nyní použijeme proměnnou $conf['servers'][0]['port'] pro nastavení portu, na kterém PostgreSQL běží, ponechte přednastavenou hodnotu 5432. Proměnnou $conf['servers'][0]['defaultdb'] nastavíte výchozí databázi, tu je třeba změnit jen pokud nemáte přístup k template1. Proměnné $conf['servers'][0]['pg_dump_path'] a $conf['servers'][0]['pg_dumpall_path'] nastavují cesty k programům pg_dump a pg_dumpall. I tyto proměnné mohou zůstat nezměněné (/usr/bin/pg_dump a /usr/bin/pg_dumpall). Celé nastavení jednoho serveru tak bude vypadat následovně:

$conf['servers'][0]['desc'] = 'PostgreSQL';
$conf['servers'][0]['host'] = 'localhost';
$conf['servers'][0]['port'] = 5432;
$conf['servers'][0]['defaultdb'] = 'template1';
$conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump';
$conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';

Pokud byste si potřebovali nastavit připojení k několika serverům, vytvořte i pro ně takovýto blok příkazů, jen v názvech jednotlivých proměnných nahraďte [0] za [1], [2] ...

Poslední zásah do konfiguračního souboru config.inc.php je nutný jen pokud se budete připojovat na účty bez hesla. phpPgAdmin je automaticky nastaven, aby taková spojení odmítal. Ke změně slouží proměnná $conf['extra_login_security'], kterou nastavíte na hodnotu false. Popis konfiguračního souboru by vydal na celý článek, ale ta nejdůležitější nastavení jsem vám tu popsal.

Nyní můžete databázi ovládat pomocí webového rozhraní. Pokud máte v systému účet jménem pavel, stačí do navigační lišty vašeho oblíbeného prohlížeče zadat http://localhost/~pavel/phpPgAdmin/, vyplnit přihlašovací formulář a poté se vám již objeví úvodní obrazovka a můžete pracovat s databází PostgreSQL podle libosti.

Myslím, že základní informace o zprovoznění databáze jste se dozvěděli a teď už vše záleží hlavně na vaší odvaze experimentovat a učit se. Přeji hodně hezkých chvil s databází PostgreSQL.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=94