Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
postgresql [2013/06/12 17:17]
62.245.110.102 příkazy pro restart
postgresql [2019/02/25 18:21] (aktuální)
Řádek 1: Řádek 1:
 +====== 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:
 +<​code>​
 +sudo apt-get install postgresql postgresql-contrib
 +</​code>​A pokud chceme databázi propojit se serverem Apache, případně jazykem PHP:
 +<​code>​
 +sudo apt-get install php5-pgsql libapache2-mod-auth-pgsql
 +</​code>​
 +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:
 +<​code>​
 +unsafe permissions on private key file "​server.key"​
 +</​code>​Pak asi nejspíše pomůže, dále uvedený příkaz a nová instalace:
 +<​code>​
 +/etc/ssl$ sudo make-ssl-cert generate-default-snakeoil --force-overwrite
 +</​code>​
 +
 +
 +====== 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:
 +<​code>​
 +sudo passwd postgres #​Změní heslo
 +sudo service postgresql restart #​Restartuje server
 +</​code>​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:
 +<​code>​
 +su postgres #​Přihlášení jako administrátor databáze Postgres
 +</​code>​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:
 +<​code>​
 +$ 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
 +</​code>​
 +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:​
 +<​code>​
 +sudo gedit /​etc/​postgresql/​8.3/​main/​pg_hba.conf  ​ #Otevře konfigurační soubor
 +</​code>​Měli bychom na konci souboru dostat podobný výpis:
 +<​code>​
 +# 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
 +</​code>​Teď upravíme konec souboru třeba takto:
 +<​code>​
 +# 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
 +</​code>​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:
 +<​code>​
 +sudo service postgresql restart
 +</​code>​====== 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:
 +<​code>​
 +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ů
 +</​code>​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.
 +<​code>​
 +psql
 +</​code>​Pokud bychom se chtěli přihlásit k jiné databázi, než je naše uživatelské jméno, pak to provedeme takto.
 +<​code>​
 +psql jmeno_databaze
 +</​code>​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.
 +<​code>​
 +jmeno_databaze=#​ ALTER USER uzivatel with password '​heslo';​ #​Změna hesla
 +</​code>​Pokud jsme vytvořili databázi obyčejnému uživateli, nesmíme zapomenout mu ji také přiřadit:
 +<​code>​
 +jmeno_databaze=#​ ALTER DATABASE jmeno_databaze OWNER TO novy_vlastnik;​
 +</​code>​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):
 +<​code>​
 +sudo apt-get install phppgadmin  ​       #​Nainstaluje PhpPgAdmin z repozitářů
 +sudo ln -s /​etc/​phppgadmin/​apache.conf /​etc/​apache2/​conf.d/​phppgadmin.conf #​Vytvoří symlink
 +</​code>​==== Problémy s PhpPgAdminem ====
 +Pokud nám je při spuštění hlášena nějaká chyba, zkusíme toto:
 +<​code>​
 +sudo gedit /​usr/​share/​phppgadmin/​conf/​config.inc.php #​otevře soubor
 +</​code>​a změníme:
 +<​code>​
 +$conf['​extra_login_security'​] = true;
 +</​code>​na:​
 +<​code>​
 +$conf['​extra_login_security'​] = false;
 +</​code>​restartujeme apache:
 +<​code>​
 +sudo service apache2 reload
 +</​code>​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ě:​
 +<​code>​
 +sudo gedit /​usr/​share/​phppgadmin/​libraries/​lib.inc.php #​Otevře soubor
 +</​code>​Toto:​
 +<​code>​
 +$PHP_SELF = htmlspecialchars($_SERVER['​PHP_SELF'​],​ ENT_QUOTES,​$lang['​appcharset'​]);​
 +</​code>​nahradíme za:
 +<​code>​
 +$PHP_SELF = htmlspecialchars($_SERVER['​PHP_SELF'​],​ ENT_QUOTES,'​ISO-8859-1'​);​
 +</​code>​**Pokud se vyskytnou problémy s nedostupností PhpPgAdmin přes [[http://​localhost/​phppgadmin]],​ nejjednodušším řešením je vytvořit symlink:**
 +<​code>​
 +sudo ln -s /​usr/​share/​phppgadmin /​var/​www/​phppgadmin
 +</​code>​====== Práva ======
 +Přidělení práv danému uživateli:
 +<​code>​
 +jmeno_databaze=#​ GRANT INSERT ON tabulka TO uzivatel;​ #​Vytvoří právo uživateli uzivatel vkládat do tabulky tabulka
 +</​code>​Odebrání práv:
 +<​code>​
 +jmeno_databaze=#​ REVOKE prikaz ON seznam FROM uzivatel;
 +</​code>​Můžeme také přidělovat jstá práva při vytváření uživatele:
 +<​code>​
 +jmeno_databaze=#​ CREATE USER uzivatel WITH CREATEDB CREATEUSER;​ #​Uživatel může vytvářet databáze a uživatele
 +</​code>​Přidělování vlastnictví:​
 +<​code>​
 +ALTER DATABASE jmeno_databaze OWNER TO uzivatel;​ #​Přidělovat můžeme rovněž tabulky nebo schémata
 +</​code>​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}}