====== 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}}