Instalace PostgreSQL
Instalace PostgreSQL
Nemáte-li Postgres nainstalovaný, nainstalujte jej, nebo požádejte někoho, kdo to umí :).
Každá dobrá linuxová distribuce má Postgres v repozitářích.
Uživatelé Windows si můžou Postgres
stáhnout a nainstalovat.
Vyberte si nejnovější verzi, x86-32 pokud máte 32-bitové Windows, x86-64 pro 64-bitové Windows.
Předpokládám, že když se chcete učit databáze, už to umíte s počítači
natolik dobře, že stáhnout a spustit instalační soubor sami hravě zvládnete :)
Když instalujete z repozitářů (linuxový uživatelé),
je důležité vědět, co vlastně potřebujete. Databáze totiž většinou
fungují na principu klient – server. Server a klient jsou dva různé programy (software).
Server se stará o práci s daty a klient slouží ke komunikaci se serverem. Server i klient jsou často
nainstalováni na jiném počítači, ale vy si oba můžete nainstalovat k sobě. Možná že máte přístup na
školní server, takže by vám stačil jen klient. Ale s nainstalovaným serverem u sebe si užijete více legrace
(budete mít superuživatelská práva, máte server po ruce i bez interentového spojení atd.).
V OpenSuSE jsem instaloval balíčky postgresql-server
a postgresql
.
V jiných linuxových distribucích se budou balíčky jmenovat určitě nějak podobně.
Balíček postgresql
obsahuje klienta, který pracuje v příkazové řádce. Určitě vám doporučuji, abyste
celý kurz absolvovali s tímto klientem! Jeho rozhraní popíši hned v následující kapitole. A proč je tento klient
nejlepší volba?
- Je rychlý. Když budete pracovat s databázemi často, často budete klienta spouštět a vypínat. V příkazové řádce je to otázka zlomků sekund, u grafického klienta to trvá a trvá.
- Často pracujete s databází na vzdáleném počítači. Někdy se kněmu můžete připojit přímo z vašeho počítače, to umožňuje každý klient, ale někdy se musíte nejdříve připojit na vzdálený počítač (například protokolem SSH) a pak vám stejně nezbyde než pustit klienta z příkazové řádky.
- Práce s textovým klientem je rychlejší.
- Máte k dispozici příkazy pro nápovědu.
- Budu popisovat pouze práci s textovým klientem.
Nebudu vám ale zatajovat, že klientů existuje víc. Pokud rozumíte Apache + PHP,
můžete si nainstalovat phpPgAdmin
. Jedná se o webové stránky,
které slouží k administraci Postgres databáze. Když budete někdy používat postgres databázi
na nějakém web hostingu, určitě to budete dělat přes phpPgAdmin
, nebo konkurenční
Adminer.
Adminer umí komunikovat i s MySQL a několika dalšími databázemi, naproti tomu phpPgAdmin je specializován na Postgres.
Nainstalovanou aplikaci najdete na svém počítači na adrese http://localhost/phpPgAdmin/.
(zdrojové soubory jsou v adresáři /srv/www/htdocs/phpPgAdmin/
.)
Jestli trváte na grafickém klientovi, nainstalujte si balíček pgadmin3
.
(Při přihlášení nechte kolonku Počítač
prázdnou (nedávejte localhost ani 127.0.0.1),
jinak se bude pgadmin3 pokoušet přihlásit přes TCP/IP a to je obvykle zakázané.)
Uživatelé Windows si jej mohou stáhnout ze stránky
www.pgadmin.org/.
Ujistěte se, že server běží a že se spouští automaticky po startu systému, nebo že víte, jak jej spustit.
V OpenSuSE se po instalaci balíčku postgresql-server serverver automaticky nespouští.
Spusťte si YaST, v části Systém
spusťte
,
najděte Editor úrovní běhu Správce služebpostgresql
a tlačítkem Povolit
povolte jeho spouštění při startu.
Server běží jako tzv. deamon (ve Windows se tomu říká systémová služba, tuším). Server uvidíte ve výpisu procesů
(např. ps aux | egrep postgres
),
ale jinak nemá žádné rozhraní (grafické ani textové), se kterým byste mohli komunikovat. Komunikuje se sním výhradně
pomocí nějakého klienta, maximálně ještě zasíláním signálů (uživatelé Linuxu jistě tuší, o čem mluvím).
Server samozřejmě čerpá nějaké prostředky vašeho počítače (paměť, procesor), takže jej možná nebudete chtít spouštět automaticky. V Linuxu máte několik možností, jak takový server spustit, vypnout či zapnout/vypnout jeho automatické spuštění. To se může hodněl lišit distribuce od distribuce, tak jenom ukáži několik možností v OpenSuSE (většinu příkazů musíte spouštět jako root).
$ sudo /etc/init.d/postgresql stop # vypne server
$ sudo /etc/init.d/postgresql restart # restartuje server (načte znovu konfiguraci)
$ sudo systemctl stop postgresql # vypne server (modernejsi zpusob nez ten nahore)
$ sudo systemctl start postgresql # spusti server
$ systemctl status postgresql # vypise status
postgresql.service - LSB: Start the PostgreSQL master daemon
Loaded: loaded (/etc/init.d/postgresql)
Active: active (exited) since Wed, 2013-11-20 11:46:25 CET; 4s ago
Process: 29152 ExecStop=/etc/init.d/postgresql stop (code=exited, status=0/SUCCESS)
Process: 29252 ExecStart=/etc/init.d/postgresql start (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/postgresql.service
Vypíše-li vám poslední příkaz řádku Active: active (exited)…
(tak jako v příkladu)
nebo Active: active (running)…
, máte vyhráno!
psql
.
Vytvoření uživatele
Po čerstvé instalaci PostgreSQL musíte 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).
PostgreSQL (na rozdíl od MySQL) spojuje uživatelské účty s těmi z operačního sytému. Můžete se sice připojit k databázi i pod jiným uživatelským jménem, ale chce to nějaká práva navíc. Nejjednodušší bude, když se budete držet stejného jména pro přístup k databázi jako je uživatelské jméno uživatele Linuxu.
Následující příklad je z operačního systému Linux. Pro uživatele Windodws návod (zatím?) bohužel nemám.
Řekněme, že máte v Linuxu uživatelský účet s loginem rimmer a chcete, abyste s tímto loginem mohli nejen pracovat s obsahem databáze, ale chcete mít i právo další databáze vytvářet a mazat. Pak postupujte následovně:
Poznámka:
$
uvozuje příkazy, které se zapisují do příkazové řádky
(ve Windows v okně programu command.com
nebo cmd
).
=>
uvozuje příkazy, které se zapisují v programu psql
(což je textový klient).
- Přihlašte se jako root.
$ su - root - Nyní se přihlaste jako uživatel postgres. (Jelikož jste
přihlášen jako root, nebude po vás vyžadováno heslo.)
Uživatel postgres je vytvořen automaticky během instalace databáze a má neomezená práva.$ su - postgres - Spusťte program
psql
. Programpsql
je textový klient, který se přihlásí k vaší lokální databázi PostgreSQL (pokud mu nepředáte žádné parametry). Uživatel postgres, pod kterým byste měli teď být přihlášeni, nevyžaduje žádné heslo.
$ psql - Vytvořte uživatelské konto pro uživatele (například rimmer) (nezapomeňte na středník na konci):
Všimněte si, že Postgres vypsal po zadání příkaz
CREATE ROLE
. Postgres má i příkaz CREATE ROLE, který se chová podobně, ale není to to samé coCREATE USER
! Podrobnosti popíši v některé z příštích kapitol.Pokud nechcete, aby uživatel rimmer mohl vytvářet a mazat databáze, zadejte místo předchozího příkazu jen:
- Opakujte krok 4. pro další uživatele.
- Odhlašte se z databáze (klávesovou kombinací
CTRL+d
, nebo příkazem\q
). - Odhlaste se z uživatelského účtu postgres i root. Přihlašte se v Linuxu jako uživatel rimmer.
Jinou cestou, jak vytvořit uživatele, je použití programu
createuser
(v příkazové řádce shellu).
Musíte být zase přihlášeni jako uživatel postgres.
Přepínače tohoto programu 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ě).
Vytvoření databáze
Server už běží, vytvořili jste si už i uživatele s právem vytvářet databáze, takže zbývá už jen nějakou databázi vytvořit.
K vytváření databází slouží příkaz createdb
.
Má několik zajímavých voleb. (Všechny si 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 defaultní kódování
databáze, -T
pro určení „template“ databáze, --lc-collate
pro určení jak se mají texty v databázi třídit a --lc-ctype
pro určení klasifikace znaků.
(Všechno bude podrobně vysvětleno někdy později).
Defaultně se pro kódování použije to kódování,
které bylo vybráno při instalaci Postgresu. Přepínačem -E
můžete nastavit libovolné (Postgresem podporované) kódování, například LATIN2
(vhodné pro středoevropské jazyky v Linuxu), WIN1250 (středoevropské
jakzyky ve Windows) nebo UTF8. Kódování UTF8 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í LATIN2.
UTF-8 sice zabírá více místa a práce s ním je o ždibec pomalejší, ale zato umožňuje
ukládat text v mnoha jazykových sadách (takže není problém uložit text v češtině i azbuce).
Dnes je běžné mít např. webové stránky v různých jazycích, takže UTF8 je jasnou volbou.
V kompletním seznamu podporovaných kódování
najdte další informace. Pro tuto chvíli bude stačit, když mi budete věřit, že UTF-8 je váš favorit.
Totéž platí o výběru správného collate a ctype.
$ createdb -E UTF8 -T template0 --lc-collate=cs_CZ.UTF-8 --lc-ctype=cs_CZ.UTF-8 rimmer
$ psql rimmer
psql (9.6.7, server 9.6.6)
Pro získání nápovědy napište "help".
rimmer=> \q
$
psql
není nutné,
pokud se přihlašujete k databázi stejného jména, jako je
vaše uživatelské jméno.
Chcete-li vidět všechny existující databáse, použijte příkaz psql -l
:
Seznam databází
Jméno | Vlastník | Kódování | Collation | CType | Přístupová práva
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | cs_CZ.UTF-8 | cs_CZ.UTF-8 |
rimmer | petr | UTF8 | cs_CZ.UTF-8 | cs_CZ.UTF-8 |
template0 | postgres | UTF8 | cs_CZ.UTF-8 | cs_CZ.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
Není nutné, abyste úplně chápali vše předešlé. Ale 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, abyste si mohli vyzkoušet všechny příklady.
Instalace MySQL / MariaDB
Databáza MariaDB je komunitní projekt, který se oddělil od MySQl poté, co MySQL koupil Oracle a začal Mysql „dusit“. První verze byla téměř totožnou kopií MySQL. Aktuální verze MariaDB 10 se už však začíná od mysql mírně lyšit (je jasný, že vývojáři MariaDB nebudou jen opisovat novinky z MySQL co vymyslí Oracle, ale chtějí přidat něco „vlastního“). Stále ale platí, že jsou tyto dvě databáze kompatibilní, téměř jedno jsou.
Tento seriál byl původně psán pro MySQL, avšak jak MariaDB přebírá otěže, budu se postupně orientovat právě na tuto databázi. V následujících kapitolách ale můžete MySQL a MariaDB brát jako synonyma, nebudu popisovat nic, co by nefungovalo v obou databázich stejně. Doporučuji vám používat communitní MariaDB.
Instalace MySQL je hodně podobná PostgreSQL. Takže jen ve stručnosti: nainstalujte si
balíčky mysql-community-server
a mysql-community-server-client
(nebo mysql-server
a mysql-client
), resp.
mariadb
a mariadb-client
.
Ujistěte se, že je server spuštěn, případně si nainstalujte webového klienta
phpMyAdmin
, nebo grafického klienta
mysql-workbench
.
(Mimochodem, mysql-workbench
je o mnoho lepší než pgadmin
, ale i tak vám
doporučuji začít s textovým klientem mysql
).
Protože se snaží MariaDB nahradit MySQL, po jejím nainstalování máte k dispozici program mysql
,
který ve skutečnosti spouští klienta MariaDB. I další programy z instalace MariaDB mají stejné názvy jako
z MySQL.
Vytvoření databáze a uživatele
Při instalaci MySQL je vytvořen uživatel root
, který má všechny práva. V MySQL nemá uživatel databáze
žádnou spojitost s uživateli Linuxu, takže se může každý připojit jako root. Po instalaci nemá
root (MySQL uživatel root) nastavené žádné heslo, takže se může k serveru přihlásit s tímto supermocným
uživatelem každý, kdo se naloguje do počítače (je možné se připojit pouze z localhostu). Je velmi záhodno
nastavit heslo uživateli root jak rychle to jen jde, ale pokud máte k počítači přístup jenom vy, tak to
není zase tak horké.
Databázi a uživatele vytvoříte pomocí SQL příkazů skrze klienta a účtu root:
mysql> CREATE DATABASE rimmer DEFAULT CHARSET UTF8 COLLATE utf8_czech_ci;
mysql> GRANT ALL PRIVILEGES ON rimmer.* TO rimmer@localhost;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| rimmer |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql> quit
$
Příkazy v příkladu vytvoří databázi rimmer s defaultním kódováním UTF8 a tříděním dle českého jazyka (utf8_czech_ci). Dále vytvoří uživatele s loginem rimmer (bez hesla), který se může přihlásit k databázi z localhostu a rovnou mu nastaví všechny práva (ALL PRIVILEGES) ke všem tabulkám v databázi rimmer (i těm tabulkám, co teprve budou v databázi rimmer vytvořeny).
Databázi můžete smazat příkazem DROP DATABASE rimmer;
.
MySQL podporuje dva druhy utf8 kódování. První, utf8 podporuje utf znaky max 3 bity dlouhé (všechny „Basic Multilingual Plane“ (BMP), utf8mb4 až 4 bity dlouhé. Pokud tedy chcete ukládat znaky mimo BMP, jako jsou například smajlíci 😂, vytvořte databázi takto:
8 z 10 programátorů doporučuje utf8mb4 :-).
Nyní se můžete přihlásit k databázi rimmer jako uživatel rimmer z localhostu.
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.0.20-MariaDB openSUSE package
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql:rimmer> quit
Bye
rimmer $
mysql
se snaží uhodnout jméno podle uživatelského jména Linuxu, takže pokud je stejné jako
jméno databázového uživatele, nemusíte jej při spuštění clienta uvádět. Server localhost je také defaultní,
takže ani to nemusíte uvádět. Stačilo by tedy pouhé mysql rimmer
.
mysql -u rimmer -h 127.0.0.1
.
Instalace SQLite
SQLite je trochu zvláštní databáze. Je to program, který má v sobě jakoby server i klienta. Jako databázi používá libovolný soubor, který mu určíte. Když neexistuje, vytvoří si jej, když existuje, pokusí se s ním pracovat jako s SQLite databází.
Z toho vyplývá, že stačí nainstalovat jeden balíček – sqlite3
.
(Nejspíš najdete ve své distribuci ještě starší verzi sqlite2
, s tou neztrácejte čas).
Uživatelé Windows is mohou stáhnout Precompiled Binaries for Windows. Dále vás odkážu zase na to, jak nastavit PATH.
SQLite neřeší žádné uživatele, buď máte přístup k souboru, nebo nemáte.
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .quit
$
Instalace Oracle XE
Nejtěžší nakonec. Oracle databázi nenajdete ve svých repozitářích. Budete si jí muset stáhnout ze stránek Oracle. (Abyste to mohli udělat, tak se budete muset nejdříve (zdarma) zaregistrovat).
Pokud se vám nechce nebo nepovede Oracle XE instalovat, můžete si zkusit online verzi. Určitě ale doporučuji nejdříve instalaci zkusit, není nad to moci pracovat na svém PC (nemluvě o možnosti využití Oracle SQL Developeru, viz dále).
Výhoda online verze je, že běží na novější verzi databáze (aktuálně Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production).
Oracle databáze je velmi, velmi drahá. Naštěstí existuje Express Edition, která slouží pro výuku a je zdarma. Má nějaká omezení (max. možný počet připojení k databázi, max. velikost dat v databázi atp.), ale ty vás při výuce nemusí trápit.
Aktuálně si můžete stáhnout XE verzi pro Windows 32 bit /64 bit, nebo Linux 64 bit. A protože máte zaručeně Linux 32 bit, mám pro vás jednu vychytralou radu: použijte VirutalBox.
K dispozici je verze Oracle Database Express Edition 11g Release 2, ačkoliv už existuje placená verze Oracle Database 12c Release 1, Express Edition 12c nejspíš nevyjde dříve, než Oracle Database 12c Release 2.
Já používám jako OS 32 bit Debian. To mi ale nezabrání v tom, abych nemohl nainstalovat do VirtualBoxu 64 bit OpenSuSE 12.3 a v něm 64 bitovou verzi Oracle XE pro Linux.
Oracle XE vyžaduje, abyste měli v počítači alespoň 1500 MiB paměti RAM.
Před instalací Oracle musíte přidat následující řádku do /etc/hosts
, jinak se Oracle odmítne spustit
a vůbec neřekne proč:
127.0.0.0 nazev_pocitaceNázev počítače získáte příkazem
uname -n
.
Po stažení instalačního balíčku rozbalte tento ZIP balíček, přejděte do adresáre Disk1
a nainstalujte jej (jako root):
Během instalace budete dotazováni na pár věcí. Ponechte defaultní volby kde to jde. Dejte si jen pozor, aby jste vybrali spouštění Oracle databáze při startu systému. Budete také požádáni o zadání hesla pro systémového uživatele SYSTEM, to rozodně nezapomeňte, jinak budete v háji.
Oracle XE nainstaluje jak klienta, tak server a k tomu ještě webovou aplikace apex
.
To je moc pěkné webové rozhraní pro sledování serveru, vytvoření nového uživatele, přihlášení se k databázi
a k práci s ní. Nedoporučuji používat textového klient oracle. Já vím, že jsem to do teď doporučoval
u všech databází, ale Oracle přestal aktualizovat textového klienta asi tak někdy v době temna a podle toho to vypadá.
Když uděláte nějakou chybu, hlásí nepochopitelné hlášky, když se někde překlepnete, musíte celý příkaz psát znovu
(žádná historie) atd.
Určitě se vyplatí, když se nejdříve seznámíte s apexem
. Později ale můžete přejít na příjemnějšího
grafického klienta – SQL Developer.
(Tento klient vám sice neprozradí nic o stavu serveru jako apex, ale přeci jen je práce v desktopové aplikaci
příjemnější než ve webové …)
Vytvoření uživatele a databáze
Po instalaci Oracle najdete v menu aplikací několik Oracle zástupců.
Ne všichni bohužel pracují jak mají. Například start a stop databáze nefunguje, nejspíš proto,
že jsou k tomu potřeba práva uživatele root. Spustit příkazovou řádku se mi z menu taky nepovedlo,
protože zástupce odkazuje na skript, ve kterém je chyba.
(Pokud po konzoli opravdu toužíte, spustit jí můžete příkazem
/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh
. Ale možná budete mít
štěstí a vám ten zástupce fungovat bude.)
Nejdůležitější je zástupce na spuštění apexu Get Started With Oracle
Database 11g Expres Edition
. Ten naštěstí funguje. Spustí
webový prohlížeč a otevře stránku localhost:8080/apex/. Měli byste vidět stránku jako
na obrázku Apex.
Přejděte do Application Express
, kde si založíte uživatele s databází (tady se tomu
říká workspace). Nejdříve budete dotázání na jméno (to je SYSTEM) a heslo (to je to, co jste
vyplnili při instalaci). Pak byste se měli dostat na stránku jako je na obrázku Vytvoření
uživatele a databáze.
Database user name a Application user name vyplňte stejně, ať se vám to neplete. Workspace se vytvoří automaticky se stejným jménem, jako Database user name.
Po vytvoření uživatele a jeho workspace se můžete přihlásit.
Všimněte si na obrázku Vytvoření uživatele a databáze v pravo tlačítka
Already have an account? …
. Kliknutím na něj se dostanete na přihlašovací
obrazovku pro uživatele.
Na stejnou obrazovku se dostanete, pokud napíšete do prohlížeče přímo adresu
localhost:8080/apex/,
takže se nemusíte do apexu dostávat tak krkolomě přes přihlášení uživetele SYSTEM …
Po přihlášení byste měli vidět obrazovku, jako je na obrázku Apex domovská stránka.
Klikněte na SQL Workshop
, pak na SQL Commands
a můžete psát své SQL
příkazy.
V textovém klientovi se přihlásíte (po spuštění sqlplus.sh skriptu viz výše) k databázi příkazem connect username/password
.
Ale jak už jsem psal, moc to nedoporučuji.
SQL Developer
Oracle SQL Developer je grafické rozhraní určené primárně pro práci s Oracle Databází. Podporuje i práci s MySQL a od verze 4 i s Postgresem.
Aby vám fungovalo připojení do Postgresu, musíte nejdříve stáhnout JDBC driver pro Postgres. Pozor na verzi JDBC driveru. Záleží na verzi javy, kterou máte nainstalovanou. Vzhledem k tomu, že SQL DEveloper v 4 vyžaduje javu 1.8, budete potřebovat PostgreSQL JDBC 4.2 Driver, 42.2.1. Tedy tak to alespoň platí v době pasní tohoto odstavce.
Dále v SQL Developeru vyberete Tools → Preferences, Database → Third Party JDBC Drivers a pak přidáte stažený jar soubor.
Pak už můžete vytvořit nové databázové připojení a vybrat si záložku PostgreSQL.
Stejný postup platí i pro MySQL/MariaDB, jen stáhnete MySQL JDBC Driver.
Budete se muset přihlásit Oracle účtem a vyplnit nějaký otravný dotazník, ale je to zadarmo.
PostgreSQL připojení mi v určitých případech nezobrazuje seznam tabulek, pohledů atp. Mohu jen pouštět SQL příkazy. Myslím, že to má něco společného s nastavením práv, ale zatím jsem nepřišel na to, co. Pro MySQL funguje bezvadně. Pro SQLite neexistuje v SQL Developeru podpora.
Závěr
Hurá, to nejhorší máte zasebou. Když už máte nainstalovanou databázi a víte jak se k ní připojit, nemůže vás již nic zastavit od toho stát se SQL guru. Smyslem této kapitoly nebylo abyste něco pochopili, to příjde v dalších kapitolách. Mimo jiné jsem zde používal zmateně pojem „databáze“. Co toto slovo vlastně znamená se dozvíte v další kapitole.