Správa linuxového serveru: PostgreSQL: Klienti a zálohování

Minulý díl se věnoval instalaci a zprovoznění PostgreSQL. Tento díl představí klienty pro správu a obsluhu Postgresu a zmíní zálohování a obnovu Postgresu.

Řádkový klient psql a změna hesla uživatele

Po instalaci Postgresu na server budete mít k dispozici řádkového klienta psql. Pokud při jeho spuštění nepoužijete žádné parametry, pokusí se připojit k místní databázi jako uživatel, pod kterým jste přihlášeni. Uživatelem s administrátorskými právy je v případě Postgresu uživatel postgres, nikoliv „obvyklý“ uživatel root. Pokud jste uživateli postgres nenastavili vlastní heslo, budete muset získat přístup k DBMS bez hesla, a sice jako unixový uživatel postgres:

su postgres -

Poté můžete spustit klienta psql:

postgres@debian:/root$ psql
psql (8.4.7)
Pro získání nápovědy napište "help".

postgres=#

Chcete-li nastavit uživateli postgres nějaké heslo, abyste mohli k DBMS přistupovat jako databázový uživatel postgres bez nutnosti měnit unixového uživatele pomocí su, použijte buď interaktivní příkaz \password, nebo SQL příkaz ALTER ROLE:

postgres=# ALTER ROLE postgres WITH PASSWORD 'moje_dlouhe_a_bezpecne_heslo';

Budete-li chtít provádět administrátorské úkony třeba ze skriptů spuštěných s právy roota, můžete samozřejmě použít su mechanismu pro změnu efektivního uživatele na postgres, jen je třeba si dát pozor na to, že uživatel postgres má na rozdíl od roota právo zápisu pouze do některých adresářů (zejména /var/lib/postgres, kde sídlí konfigurační i datové soubory DBMS). Jinou možností je nastavit databázovému uživateli postgres heslo a přistupovat k němu pohodlně pod jakýmkoliv uživatelem. Zde ovšem přichází na řadu drobný problém, a sice jakým způsobem nástroji psql předat heslo, aby nebylo nutné jej pokaždé zadávat interaktivně. Za tímto účelem můžete použít soubor .pgpass, který vytvořte ve svém domovském adresáři se obsahem podle následujícího vzoru:

jmeno_pocitace:port:databaze:uzivatel:heslo

Konkrétní příklad pro Postgres běžící na localhostu na standardním portu, uživatele postgres a libovolnou databázi by mohl vypadat třeba takto:

localhost:5432:*:postgres:moje_dlouhe_a_bezpecne_heslo

Samotné přihlášení k DBMS pomocí psql pak provedete takto:

psql -U postgres -h localhost -p 5432

Parametr -U značí uživatele, -h název počítače, na kterém běží DB, a -p udává port (Postgres standardně běží na portu 5432).

Nouzový rychlokurz psql

Jste-li zvyklí převážně na MySQL a na příkazy typu SHOW DATABASES či SHOW TABLES, které vám v psql určitě fungovat nebudou, hodí se vám tento nouzový rychlokurz klienta psql. Dodávám, že samotný nástroj psql má velmi dobrou dokumentaci, kterou určitě doporučuji prostudovat.

Globální operace

Operace nad konkrétní databází

Webový klient phppgadmin

phppgadmin: Uživatel postgres přihlášený ihned po instalaciphppgadmin: Uživatel postgres přihlášený ihned po instalaci

Znáte-li MySQL, znáte také určitě vynikajícího webového klienta/správce phpMyAdmin. Ten je ovšem stavěn pouze pro MySQL a pro Postgres jej není možné použít. Existuje však jiný projekt, a sice phpPgAdmin, který se snaží kráčet ve stejných šlépějích jako phpMyAdmin, přičemž je stavěn pro Postgres. Jeho instalace v Debianu je velmi jednoduchá, stačí nainstalovat příslušný balíček:

aptitude install phppgadmin

Používáte-li webový server Apache, bude jeho konfigurace automaticky upravena při instalaci balíčku, a to přidáním symbolického odkazu phppgadmin do /etc/apache2/conf.d. Pro úplnost dodávám, že tento symbolický odkaz ukazuje na /etc/phppgadmin/apache.conf. Výchozí úprava konfigurace pro Apache je poměrně restriktivní, umožňuje pouze připojení z localhostu. Pokud budete chtít tento nástroj využívat k provádění správcovských činností, nemusí být od věci to tak nechat (a použít SSH tunel), popřípadě povolit přístup pouze z některých počítačů:

allow from 1.2.3.4

phppgadmin: Pohled na nově vytvořené databázephppgadmin: Pohled na nově vytvořené databáze

Samotné přihlášení administrátora je v phppgadmin rovněž zakázáno. To má na svědomí volba extra_login_security v /etc/phppgadmin/config.inc.php:

$conf['extra_login_security'] = true;

Jste-li si jisti, že chcete přihlášení správců opravdu povolit, je třeba tuto volbu nastavit na false.

Desktopový GUI klient pgAdmin III

pgAdmin III je patrně nejlepší dostupný FOSS nástroj určený pro správu Postgres DBMS. Jedná se o multiplatformní desktopovou aplikaci, která umožňuje připojení k místním i vzdáleným databázím, jejich pohodlnou správu i klasický SQL přístup. SQL dotazy je možné zadávat ručně nebo je sestavit graficky. Podporuje jak Postgres, tak některé jeho komerční a proprietární klony. Je schopen zobrazit a pracovat s veškerými Postgres objekty, ke kterým umí i zobrazit jejich SQL definice (což by mělo být vidět na screenshotu níže).

Pohled na jednu z tabulek v pgAdmin IIIPohled na jednu z tabulek v pgAdmin III

Jednoduchý SQL dotaz v pgAdmin IIIJednoduchý SQL dotaz v pgAdmin III

Tento nástroj je běžně dostupný v repozitářích linuxových distribucí, v Debianu se jedná o balíček pgadmin3.

Grafické sestavení dotazu v pgAdmin IIIGrafické sestavení dotazu v pgAdmin III

Samotné připojení ke vzdálené databázi je možné provést řadou způsobů. Pro správce je patrně nejrychlejší použít SSH tunel, jehož vytvoření je popsáno v Úvodu do SSH pro správce. Je samozřejmě také možné nastavit Postgres, aby přijímal spojení ze sítě a umožňoval přihlášení uživatele či uživatelů z určité IP adresy. K tomu slouží konfigurační soubor pg_hba.conf, který v Debianu Squeeze s Postgresem 8.4 naleznete v /etc/postgresql/8.4/main/.

Zálohování Postgresu

K zálohování konkrétní databáze se používá nástroj pg_dump, který má stejné parametry jako interaktivní klient psql. Zálohování databáze postfix dostupné na místním serveru a na standardním portu by se tedy s použitím uživatele postgres provedlo takto:

pg_dump -U postgres -h localhost -p 5432 postfix > zaloha_postfix.sql

Výstupem je obsah tabulky v SQL, který by se vypsal na standardní výstup (tedy obvykle přímo do konzole), proto bylo v tomto případě použito přesměrování do souboru zaloha_postfix.sql. V případě větší databáze by bylo vhodnější zapojit kompresi, například takto:

pg_dump -U postgres -h localhost -p 5432 postfix | gzip > zaloha_postfix.sql.gz

Chcete-li zazálohovat celý databázový cluster, použijete nástroj pg_dumpall, prakticky totožným způsobem jako pg_dump, pouze neuvedete název konkrétní databáze pro zálohování (zde už raději uvádím pouze příklad s kompresí):

pg_dump -U postgres -h localhost -p 5432 | gzip > zaloha_clusteru.sql.gz

Obnova ze záloh

Tento článek začal představením klienta psql a tímto nástrojem také skončí. Jelikož záloha DB/DBMS má podobu sady SQL příkazů uložených v určitém souboru, není nic jednoduššího než vzít klienta psql a všechny SQL příkazy postupně provést, takto:

psql -U postgres -h localhost -p 5432 < zaloha.sql

V případě komprimovaného archívu si můžete pomoci rourou, takto:

gzip -c -d zaloha_clusteru.sql.gz | psql -U postgres -h localhost -p 5432