Pokud jste čerstvě nainstalovali PostgreSQL, musíte si vytvořit uživatele, který bude mít právo vytvářet a mazat databáze ( popřípadě další uživatele, kteří budou mít právo do databází "jen" zapisovat). Řekněme, že máte v Linuxu uživatelské konto s loginem rimmer a chcete, aby jste mohli do databází nejen přistupovat, ale i vytvářet a rušit nové. Postupujte následovně:
Příkaz createdb má několik zajímavých voleb, které můžete najít v manuálové stránce. Za zmínku stojí určitě přepínač -E, kterým můžete určit kódování databáze. Defaultně se použije to kódování, které bylo vybráno při instalaci postgresu. Přepínačem -E můžete nastavit libovolné podporované kódování, například LATIN-2 nebo UTF-8. Kódování UTF-8 je vhodné, pokud budete data přenášet mezi různorodými systémy, jinak bych doporučoval se držet spíše starého dobrého kódování LATIN-2.
Jinou cestou jak vytvořit uživatele je použití příkazu createuser na příkazové řádce shellu (musíte být přihlášeni jako uživatel Postgres). Přepínače získáte pomocí příkazu createuser --help nebo v manuálové stránce (důležitý přepínač je například pro uložení hesla v šifrované podobě).
Pokud se nemůžete přihlásit jako root (třeba ve škole), pak buď
již existuje nějaká databáze, ke které máte přístup (zjistěte si u
svého administrátora jaká), nebo máte možnost ji vytvořit. Na jméno
vytvářené databáze může být určité omezení (u nás ve škole musí
obsahovat login uživatele, pod kterým jsem přihlášen). Pak můžete
vytvořit databázi příkazem
$ createdb rimmer1
V dalším textu předpokládám, že již máte nainstalovaný
PostgreSQL, vytvořenou databázi a získali jste příslušná přístupová
práva. Chcete-li vidět všechny existující databáse, použijte
příkaz
$ psql -l
Než se pustíme do práce s PostgreSQL, musíme si osvětlit nějaké pojmy ohledně databází.
Postgres je relační databáze fungující na bázi server-klient. Na první pohled to vypadá složitě, ono kolem databází vznikla celá věda, ale pro domácí použití Vám bude stačit pochopit pár následujících pojmů. Pokud je nepochopíte hned, nevadí, jejich význam vysvětlím na příkladech v dalších kapitolách.Databáze je nějaký soubor uložený kdesi na disku. Struktura tohoto souboru je tvořena tabulkami (a relacemi), které obsahují řádky a sloupce. Například můžete vytvořit tabulku se jménem telefoni_seznam, která bude obsahovat dva sloupce se jmény jmeno a telefon. Řádky pak budou tvořit jednotlivé záznamy v tabulce (Kolik zázanmů jmeno:telefon, tolik řádků).
| jmeno | telefon |
|---|---|
| James Bond | 02/12345 |
| Karel IV. | 02/012345 |
Relace je vztah mezi tabulkami v databázi. Například budete mít tabulku obsahující názvy hudebních CD a tabulku obsahující jména zpěváků. Vztah, který určí které CD patří kterému zpěváku, je relací. Až se budete učit relace používat, pochopíte a osvojíte si je rychle.
Serverem se zde myslí program, který se stará o soubory databáze. Zapisuje do nich, čte z nich a vrací data klientovi. Udržuje informace o přístupových právech k databázím atp. Server většinou běží na nějakém vzdáleném počítači, kde se databáze ukládají a k tomuto počítači mívá přístup více klientů. Ovšem klient a server můžou být na jednom počítači, pokud nejste připojeni k internetu, bude to zřejmě váš případ. Server pak běží jako proces na pozadí a vyčkává, dokud se neozve klient. V PostgreSQL se o tyto činnosti starají dva programy: postmaster, který řídí komunikaci mezi procesy a zajišťuje inicializaci a postgres, který vykonává SQL příkazy.
Klient je také program. Klient říká serveru, co má udělat, jaká data z tabulky má vrátit, jaká tam má vložit atd. Klient se vůbec nestará o to, jakým způsobem a kde jsou data uložena, komunikuje pouze se serverem. V PosgreSQL je klientem například program psql, ale mohou to být také například moduly do PHP nebo jiných programovacích jazyků a atp.
Primárním klíčem se myslí hodnota v sloupci, který obsahuje jedinečné hodnoty (tj. sloupec primárních klíčů, například se jménem id). Chcete-li si vést databázi zaměstnanců, může se vám stát, že dva zaměstnanci budou mít stejné jméno. Jak takové zaměstnance od sebe odlišit? Zavedením sloupce primárních klíčů. To může být sloupec s rodnými čísly, nebo prostě jen čísly. Každá tabulka, do které se odkazujete z jiné tabulky by měla mýt primární klíč.
Primárním klíčem může být třeba i řetězec (jméno apod.). Musíte mít ovšem jistotu, že nikdy nebudete mít dva lidi se stejným jménem. Další nevýhodou je vyšší pravděpodobnost překlepu při psaní dlouhého řetězce, oproti číslu. A v neposlední řadě to zbytečně zabírá místo v jiných tabulkách, kde se na tuto tabulku pomocí primárního klíče odkazujete. Číslo vám vždy zabere méně místa, než celé jméno!
| jmeno | plat | id |
|---|---|---|
| Leoš Janáček | 13000 | 0 |
| Tomas Mann | 15000 | 1 |
| Leoš Janáček | 20000 | 2 |
Cizí klíč je hodnota primárního klíče z jiné tabulky (ve sloupci cizích klíčů, například se jménem id_zamestnance). Řekněme že tabulka, která bude zaznamenávat příchody vašich zaměstnanců, bude obsahovat sloupec, do kterého se budou zapisovat primární klíče z tabulky zaměstnanců (a relace je na světě :-)). Cizí klíče v tomto sloupci se pochopitelně budou opakovat. (Vidíte, kolik bytů ušetříte tím, že nepoužíváte jako primární klíč jméno? Tím šetříte nejen místo, ale také zvyšujete rychlost práce s takovou databází).
| cas | id_zamestnance |
|---|---|
| "Pondeli, 07:30" | 0 |
| "Utery, 07:00" | 1 |
| "Utery, 07:30" | 0 |
| "Utery, 08:30" | 2 |
Jak již bylo řečeno, máme tu jednu serverovou aplikaci, která se stará o databáze a mnoho klientských aplikací, které z jedné strany komunikují se serverovou aplikací a z druhé strany s Vámi. SQL je tzv. dotazovací jazyk, který slouží k ovládání relačních databází. Tímto jazykem se server domlouvá s klientem. To zaručuje jistou hardwarovou i softwarovou nezávislost, pokud doručíte serveru požadavek v jazyce SQL, bude mu rozumět.
Existuje mnoho firem, které vytvářejí aplikace na bázi jazyka
SQL (PostgreSQL, MySQL atd.). Ačkoli je tu snaha o vytvoření
univerzálního jazyka a vytvářejí se normy jazyka SQL, kterým by měl
rozumět každý program založený na SQL, stále existují drobné
rozdíly mezi různým softwarem. Například databáze PostgreSQL
vyžadují na konci příkazu středník, jiné zase ne. Tyto drobné
rozdíly by vás mohly vyvést z míry, pokud zde probírané příklady
nepůjdou na jiném SQL softwaru, než je PostgreSQL.
Případné nesrovnalosti by jste měli dohledat v dokumentaci k vašemu
programu. V Linuxu, distribuci Debian, existuje balíček
postgresql-doc. Po jeho nainstalování najdete informace o
PostgreSQL v adresáři /usr/share/doc/postgresql/
(Začněte dokumentem index.html)
Na internetu se můžete podívat například na http://postgresql.interweb.cz/.
Pozn: Některé rozdíly nejsou zase až tak drobné. Například mohou v nějaké odrůdě SQL existovat datové typy, které v jiné nejsou.
