postgresql

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] – příkazy pro restart 62.245.110.102postgresql [2019/02/25 18:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řá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}}
  • Poslední úprava: 2019/02/25 18:21
  • autor: 127.0.0.1