pg_ctl
je velmi užitečný, ale nedoceněný nástroj, který může usnadnit život vývojářským týmům. Přečtěte si další informace o pg_ctl
a howit může zlepšit vaše vývojové a testovací pracovní postupy.
Co je pg_ctl?
pg_ctl je nástroj příkazového řádku, který je součástí standardní distribuce Postgres. Je dostupný všude tam, kde je samotný Postgres, podobně jako ostatní zahrnuté nástroje jako psql a pg_dump .
Spustitelný soubor bude ve stejném adresáři jako ostatní binární soubory Postgres. Přesné umístění se liší podle distribuce Linuxu a verze Postgres:
# debain, ubuntu, ...
/usr/lib/postgresql/11/bin
# rhel, centos, ...
/usr/pgsql-11/bin
Možná budete chtít přidat tento adresář do své PATH nebo alias pg_ctl do úplné cesty.
Vytvoření databázového clusteru
Na rozdíl od jiných RDBMS, jeden proces databázového serveru Postgres (historicky nazývaný postmaster ), spravuje klastr databáze . Použití termínucluster není moderní a neodkazuje se na skupinu síťových uzlů. Adatabázový cluster je hostitelem sady databází, přičemž některé funkce (role, fyzická replikace, soubory WAL atd.) jsou společné pro všechny z nich. Služba Postgressystemd, která je nainstalována vaším linuxovým distrom, slouží jako jeden databázový cluster.
Můžete použít pg_ctl
k vytvoření databázového clusteru. Při vytvoření cluster žije zcela v jediném adresáři. Obsahuje všechny potřebné konfigurační soubory (postgres.conf , pg_hba.conf , atd.) a datové soubory. Je samostatný a lze jej přesunout na jiný přiměřeně podobný počítač, pokud jsou správně zpracována oprávnění k souborům. Do adresáře můžete dokonce umístit soubory protokolu, takže všechny související soubory (konfigurace, data, protokoly) budete mít na jednom místě.
Chcete-li vytvořit klastr databáze, použijte:
$ pg_ctl -D myclus initdb
Tím se vytvoří adresář s názvem myclus pod aktuálním adresářem a naplní jej všemi soubory nezbytnými pro spuštění serveru z něj.
Zde je ukázková relace:
$ pg_ctl -D myclus initdb
The files belonging to this database system will be owned by user "alice".
This user must also own the server process.
The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory myclus ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/lib/postgresql/11/bin/pg_ctl -D myclus -l logfile start
Spuštění databázového serveru
“Postgres server” je v podstatě postmaster proces, který je spuštěn s umístěním adresáře databázového klastru. Tento postmaster proces v turnpawnuje více procesů, které provádějí různé aktivity na pozadí a také obsluhují příchozí připojení. Tento procesní model můžete vidět v akci zobrazením stromu procesního systému pomocí nástroje, jako je například htop.
Chcete-li spustit proces postmaster pro váš nový databázový cluster, použijte:
$ pg_ctl -D myclus -l myclus/log start
-l
volba určuje umístění souboru protokolu Postgres, který je v tomto případě v samotném adresáři clusteru. Není neobvyklé umístit soubor protokolu do adresáře clusteru.
Měli byste vidět výstup jako tento:
waiting for server to start.... done
server started
Opětovné načtení, restartování a zastavení probíhá tak, jak byste očekávali:
$ pg_ctl -D myclus -l myclus/log reload
server signaled
$ pg_ctl -D myclus -l myclus/log restart
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
$ pg_ctl -D myclus -l myclus/log stop
waiting for server to shut down.... done
server stopped
Nyní byste měli být schopni se připojit k tomuto novému clusteru pomocí klientů jako psql a pgAdmin .
Nastavení portu a dalších možností
Prakticky však, pokud již máte na svém počítači nainstalovaný Postgres, budete pravděpodobně muset upravit myclus/postgres.conf
a změňte hodnoty pro port , unix_socket_directories a také možná adresa_poslechu než se cluster čistě spustí. Je to proto, že systémem nainstalovaná služba Postgresservice již běží na portu 5432 a adresářích vunix_socket_directories nemůže do něj zapisovat běžný uživatel. Výchozíadresa_poslechu je localhost, což znamená, že se nebudete moci připojit ke clusteru z vnějšího localhost.
Pokud používáte pg_ctl pro vytváření a odstraňování clusterů ve vašich automatizovaných testovacích skriptech je snazší, pokud můžete tyto možnosti zadat přímo z příkazového řádku, než programově upravovat myclus/postgres.conf
.Možnosti můžete zadat takto:
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start
Tím se spustí server na portu 6000 s unixovým soketem vytvořeným v adresáři /tmp a naslouchání na všech rozhraních.
Tyto možnosti musíte zadat pouze pro „start“, můžete je vynechat pro další příkazy, včetně „restart“.
Další užitečné možnosti spuštění
Existuje několik dalších možností, které můžete použít uvnitř „-o“, které by mohly být užitečné:
-F
zakáže fsync, užitečné pro rychlejší dokončení testovacích skriptů-B shared_bufffers
nastavit hodnotu shared_buffers , příklad-B 100MB
-c conf_var=value
nastavte libovolnou konfigurační hodnotu, například-c wal_level=logical
Zde je příklad s některými z těchto sad:
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start
Tyto možnosti jsou ve skutečnosti možnosti příkazového řádku postgres proces, jehož úplný seznam je zdokumentován zde.
Spustit databázi jiné verze Postgres
EnterpriseDB hostí předpřipravené binární soubory pro různé verze Postgres pro různé platformy. Toto jsou tarbally bez instalátoru.
Vezměte požadovaný tarball, rozbalte jej a vyhledejte pg_ctl
binární s ním a použijte jej k vytvoření clusteru. pg_ctl
automaticky najde přidružené binární soubory initdb/postgres/další, které potřebuje k vytvoření/spuštění clusteru.
Můžete to použít bez ohledu a nezávisle na jakékoli existující instalaci PostgreSQL na počítači.
Vytváření služeb v systému Windows
pg_ctl
je k dispozici na všech platformách, včetně MacOS a Windows. Zejména jej můžete použít ke snadnému vytvoření služby, kterou lze spustit a zastavit pomocí Správce řízení služeb (SCM). Chcete-li vytvořit službu, použijte:
pg_ctl -D myclus -N myclus_service register
Tím se vytvoří služba automatického spouštění s názvem „myclus_service“.
Tato funkce je dostupná pouze ve verzi Postgres v10 a vyšší.