Řá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
-
\l
- vypíše seznam databází a základních informací o nich -
\db
- vypíše seznam tablespaces -
\dg
- vypíše seznam rolí -
\dn
- vypíše seznam schémat -
\password [uzivatel]
- interaktivní nastavení hesla uživateleuzivatel
; pokud nebude zadán uživatel, změna se bude týkat aktuálně přihlášeného uživatele -
\c [databaze] [uzivatel] [pocitac] [port]
- připojí se k databázi
Operace nad konkrétní databází
-
\di
- vypíše seznam indexů -
\ds
- vypíše seznam sekvencí -
\dt
- vypíše seznam tabulek -
\dv
- vypíše seznam pohledů (views)
Webový klient phppgadmin
phppgadmin: 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á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 III
Jednoduchý 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 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
Nezapomeňte se přečíst náš seriál o optimalizaci PostgreSQL.