Portál AbcLinuxu, 21. května 2024 08:58

Praktický návod k PgSQL

28. 3. 2003 | Pavel Kysilka
Články - Praktický návod k PgSQL  

Migrace z MySQL, její důvody a co obnáší. Možnosti databáze. Manuál a pár triků k textové konsoli psql a programu pg_dump.

Před pár měsíci jsem dělal jěstě na databázi MySQL. Nepočítám se za nějakého odborníka na databáze. S databází MySQL jsem byl zpočátku velmi spokojen, ale jak postupem doby programujete, začínáte vidět nějaké ty "mouchy", že by se dalo něco zlepšit, dělat jednodušeji a ne jenom editovat text. Dostal jsem jeden projekt a jako databáze byla zvolena PgSQL. A od té doby nechci příliš o databázi MySQL slyšet. PgSQL je trochu o něčem jiném.

Od tohoto článku můžete očekávat pohled programátora, který s touto databázi dělá, ale není na ni příliš velký odborník. Vzhledem k době, po kterou pracuji s touto databází, se řadím mezi začátečníky, a proto je tento článek psán především pro začátečníky. Patřím k programatorům, kteří dělají databáze řádově o 20-100 tabulkách.

Očekává se určitá znalost jazyka SQL a schopnost práce s nějakým databázovým programem. Můzete zde najít pár důvodů, proč jsem přešel z MySQL, a co to obnášelo. Konsolisté zde najdou popis nástroje psql a pg_dump . I když jsem si původně myslel, že s MySQL umím většinu věcí, tak u PgSQL jsem nabyl dojmu, že jsem absolutní začátečník a nějak se s tím snažím, za pomoci dokumentace a zkoušení všeho možného na projektech a v konsoli, vyrovnat.

Uvedu pár důvodů, proč používám PgSQL. Výhody i nevýhody postgresu. A to především nestranným pohledem. Nemám zájem nějak rozpoutat flame.

Moje důvody migrace z MySQL na PgSQL

ty pozitivní:

ty nepříliš pozitivní:

Poznámka: Neříkám, že MySQL se nesnaží dohánět, co týče vlastností, PgSQL či jiné databáse. Přeci jenom ale vetšina věcí bude v PgSQL na dost vyšší úrovni. Zde mám na mysli případné flame typu "subselecty, transakce či funkce".

Celkově bych chtěl říci, že volba databáze závisí na aplikaci, pro kterou danou databázi používáte, na možnostech HW, ale i třeba na možnostech a schopnostech programátorského týmu.

První kontakt pro mě s touto databází byla její konverze z databáze MySQL. Na tomto nejprve vysvětlím rozdíly mezi těmito dvou databázemi. Pokud budete potřebovat převést databázi z MySQL, je pár projektů a z nich si můžete stáhnout patřičné konverzní programy. Mě se vcelku osvědčil mysqlpgsql.pl. Informace o těchto skriptech najdete v dokumentaci o přechodu databází na PgSQL techdocs.postgresql.org.

Ne vše převede skript korektně. To potom zjisíte při následném dumpu. Něco je třeba opravit ručně. Dá se to napravit nějakým rozumnějším editorem. Mně se osvědčil Vim, ale při zpracovávání souboru velikého desítky MB a více není zrovna nejrychlejší. Pro větší možnoství dat a z důvodů se něco naučit, bych doporučil grep, sed, cut a tr. Případně můžete využít tyto editory či textové procesory na vytvoření testovacích dat s parsováním nějakého textu do souboru s dumpem. Jsem tvrdým zastáncem konsole a grafiku na svém stroji příliš nepěstuji a nevyužívám.

Není od věci zeditovat celou databazí v nějakém rozumnějším editoru. Využijete možnosti nahrazování a především se naučíte znát příkazy SQL jazyka a strukturu databáze. Naučíte se rozumně pojmenovávat sloupce či tabulky a dáte jménům objektů v databázi nějaký systém. Následně při programování nepotřebujete zjišťovat, jak se ten či onen sloupec a tabulka jmenuje. Někdy se děsím některých vizuálních programátorů, co neumí vytvořit tabulku příkazem CREATE TABLE či změnit nějaký její sloupec pomocí příkazu ALTER TABLE. Neberu však nikomu vizuální prostředí. Každý dovede vstřebat informace jinak. Závisí to skutečně na každém individuálně. A někdy je to dost námahy v konsoli obstát v prostředí klikačů. Nicméně svoji snahu časem mnohanásobně zúročíte.

Konverze a odlišnosti databází:

PgSQL dodržuje ve více případech než MySQL standard SQL92,95. A také budete muset dodržovat standard při psaní aplikací i vy. Očekávajte tedy větší počet chybových hlášek než na MySQL. Pokud bych měl k něčemu přirovnat MySQL databázi, tak k rychle vyšlechtěné okurce. Pokud chcete dostat z této databáze více, není už příliš šancí. A dalším důvodem je i její rozšíření a jednoduchost. Ale svůj účel plní. Tyto věty, ale nemyslím hanlivě.

Instalací PgSQL se zde nechci zabývat. Toto ponechám na někoho zkušenějšího. Pokud by jste ale hledali, zkuste třeba zde dokumentaci v pdf nebo si na linuxworldu.cz vyhledejte slovo PgSQL.

Přístupy do databáze

Co vás může zmást po instalaci postgresu je, že se nemůžete dostat do databáze ani vytvořit novou databázi přes createdb, případně vytvořit uživatele pomocí createuser anebo přistoupit do psql konsole. Musíte být připojeni jako uživatel root či pokud chcete přistupovat poprvé do databáze, tak jako uživatel postgres. Stačí dát místo parametru 'password' parametr 'trust' v konfiguračním souboru /etc/postgresql/pg_hba.conf. Připojte se bez hesla a můžete tak posílat do databáze přímo data přes psql. Změňte parametr na trust. Restartněte postgres pomocí /etc/init.d/posgresql restart. Vytvořte uživatele pomocí ALTER USER jmeno_usera PASSWORD 'moje_heslo'; a nebo pomocí createuser. Změnte potom parametr 'trust' na 'password'. A opět restart postgres.

Jinak se dá ještě dost vyblbnout přes autentifikaci ident, kerberosa md5.

Tady je část konfiguráku postgree týkající se přístupů. Doporučuju přečíst tento soubor. Hodí se i pro případnou další konfiguraci: /etc/postgresql/pg_hba.conf.

local all password
host moje_database vzdalene_ip sitova_maska password

host all 127.0.0.1 sitova_maska password
host moje_database 127.0.0.1 255.0.0.0 password
host all 0.0.0.0 0.0.0.0 reject

A potom uz jen psql moje_database -U uzivatel ( -h vzdalena_masina ).

Konfigurační soubory najdete v adresaři /etc/postgresql/. Další vychytávkou může být kódování či nesprávné řazení. To může být zapříčíněno tím, že nemáte zakompilované locales a zde je nutné si postgres přeložit ze zdrojáku či znova nainstalovat. Zjistíte to tak, že pokud si dáte seřadit nějaké řádky typu řetězec, tak česká písmena budou na konci.

Vývojová prostředí

Pokud Vy nebo Váš tým děláte s touto databází, nebude od věci najít aplikace (pro vaše kolegy a především pro ty, co potřebují intuitivní prostředí pro jejich myši).

pro drsňáky:

trošku více user-frendly:

komfortnější:

A nebo použít nějaký program, který používá ODBC ovladače.

SW pro návrhy databází:

Zatím jsem nepotřeboval, i když dělám databáze přes 50 tabulek. Dostačuje tužka, papír, barvičky (to už musí být něco těžšího) a dobrá dokumentace od zadavatele především. Ale u větších projektu je nějaký nástroj patrně pro někoho nutností. Toto vidím jako jeden z nedostatků Linuxu a to nějaký grafický free nástroj na tvorbu databází. Z nástrojů, co jsem viděl, by mozná mohla být vyhovující Tora.

psql - konsole

Už jsem zde napsal, ze patřím mezi "konsolisty" a jako databázové rozhraní používam psql. Tento nástroj mě vcelku dost překvapil. Trochu se o něm rozepíši. Předpokládám, že máte již nakonfigurovaný Postgres. psql spustíte pomocí příkazu psql <jmeno_database>. Případně dodejte jméno uživatele, pokud jste na konsoli jako jiný uživatel, než který má přístup k dané databázi: -U <jmeno_uzivatele>. Budete dotazáni na heslo. Po jeho správném zodpovězení či uhodnutí, se ocitnete na konsoli databáze. Pokud jste si neprečetli žádné informace typu man psql, což předem doporučuji, je třeba ozkoušet linuxové chvaty typu \? a \h. Asi jako zásadní příkaz ješte uvedu \q. Není umění něco spustit, ale umět to i vypnout. Ti, co někdy zkoušeli a už nějaký rok zkouší editor VIM, asi budou vědet svoje (:x, :q, :q!, ZZ).

Pokud hledáte nápovědu na bashové konsoli, může pomoci man + hvězdičková konvence. Zkuste si man alter*tabl*. Pokusím se nějak popsat nejpoužívanější a nejužitečnější příkazy z postgresové konsole. Řazeno abecedně podle zkratek. Jako pomůcku uvedu znak \ a za to nějaký příkaz či objekt vašeho zájmu. Do toho všeho se jetě pokusím dodat nejaké své poznatky, znalosti a užitečnosti. Určitě v tom najdete spojitost s mnoha linuxovými příkazy. Nastíním ještě jak fungují některé přepínače typu \[neco]. \x zapni přepínač. Další \x vypni přepínač. Toto je třeba například pro: vypisuj každé políčko výsledku tabulky sql dotazu do samostatného bloku.

Příkazy psql konsole

Možná je toho na začátek moc. Vřele doporučím zkoušet příkazy konsole a učit se je. Zapamatovat si ty nejužitečnější a druhý den ještě zkusit. Mám odzkoušeno, ze učit se je nazpamět nemá cenu. Musíte bezpečne vědet, co se vám k čemu bude hodit. Data sice už umíme podle článku nějak zpracovat v konsoli, ale jak je dostat ještě ven z databaze nebo do ní. Ať už se jedná o data či o struktury tabulek. K tomu slouží příkazy psql, pg_dump. A nebo pg_dump_all pro dump z více databází či všech databází.

pg_dump

Uvedu jenom pár příkladů a užitečných věcí.

dump z databáze

$ pg_dump <moje_database> > <soubor_do_ktereho_to_presmeruji_ze_standartniho_vystupu>

dump do databáze

$ psql -d <moje_database> -f <soubor_s_daty>

Pokud hledáte nějakou dokumentaci k PgSQL, tak tu je možné najít na techdocs.postgreesql.org a archives.postgresql.org . Potom projít třeba mailinglisty (zde se dá najít mnoho praktických rad). Případně si stáhnout celou online dokumentaci v html. Také můžete zkusit příkaz man nebo man -k něco. Nějaká dokumentace je také v adresáři /usr/doc/postgree*. Pokud si myslíte, že něco nezvládate ani po neúspěšném hledání, zkuste nějakou tu konferenci. Třeba databases@linux.cz . Pokud hledáte nějaké články o PgSQL zkuste to na rootu - stačí dát vyhledat slovo PgSQL, případně to samé na linuxworldu.

Náměty k dalším článkům a do diskuse:

uzivatel@linuxu:/psql PgSQL
Password:
Welcome to psql, the PostgreSQL interactive terminal.

databaze_ctenari# SELECT MAX(uspech), MAX(znalosti), MAX(hodne_pile) FROM PgSQL GROUP BY hodne_pile ASC, znalosti ASC, uspech ASC;
databaze_ctenari# INSERT INTO autor (jmeno, prezdivka, prijmeni) VALUES ('Pavel','\'Goldenfish\'','Kysilka');
databaze_ctenari# \q

 

Související články

<flame>
Tvorba databází v MySQL - II (Proč právě MySQL?)
</flame>

Odkazy a zdroje

PgSQL
techdocs.postgreesql.org

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.