postgresql

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ě. (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/

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

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.

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.

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

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.

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.

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

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

Konvence: Tento návod nesplňuje některé z na Wiki zavedených konvencí. Více...

  • Poslední úprava: 2019/02/25 17:21
  • autor: 127.0.0.1