PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

pg_ctl Wskazówki i porady

pg_ctl to bardzo przydatne, ale niedoceniane narzędzie, które może ułatwić życie zespołom programistów. Czytaj dalej, aby dowiedzieć się więcej o pg_ctl i jak może poprawić przepływy pracy w programowaniu i testowaniu.

Co to jest pg_ctl?

pg_ctl to narzędzie wiersza poleceń zawarte w standardowej dystrybucji Postgres. Jest dostępne wszędzie tam, gdzie sam Postgres jest, podobnie jak inne dołączone narzędzia, takie jak psql i pg_dump .

Plik wykonywalny będzie znajdować się w tym samym katalogu, co inne pliki binarne Postgres. Dokładna lokalizacja różni się w zależności od dystrybucji Linuksa i wersji Postgres:

# debain, ubuntu, ...
/usr/lib/postgresql/11/bin

# rhel, centos, ...
/usr/pgsql-11/bin

Możesz dodać ten katalog do swojej PATH lub alias pg_ctl do pełnej ścieżki.

Utwórz klaster baz danych

W przeciwieństwie do innych systemów RDBMS, pojedynczy proces serwera bazy danych Postgres (historycznie nazywany postmasterem ), zarządza klatrem baz danych . Użycie terminuklaster nie jest nowoczesny i nie odnosi się do grupy węzłów sieciowych. Klaster Adatabase obsługuje zestaw baz danych, a niektóre funkcje (role, replikacja fizyczna, pliki WAL itp.) są wspólne dla wszystkich z nich. Usługa Postgressystemd, która jest instalowana przez twoją dystrybucję Linuksa, obsługuje klaster pojedynczej bazy danych.

Możesz użyć pg_ctl aby utworzyć klaster baz danych. Podczas tworzenia klaster działa całkowicie w jednym katalogu. Zawiera wszystkie niezbędne pliki konfiguracyjne (postgres.conf , pg_hba.conf itp.) oraz pliki danych. Jest samowystarczalny i może zostać przeniesiony na inny dość podobny komputer, jeśli uprawnienia do plików są obsługiwane poprawnie. Możesz nawet umieścić pliki dziennika w katalogu, dzięki czemu wszystkie powiązane pliki (konfiguracja, dane, logi) znajdują się w jednym miejscu.

Aby utworzyć klaster bazy danych, użyj:

$ pg_ctl -D myclus initdb

Tworzy to katalog o nazwie myclus w bieżącym katalogu i wypełnia go wszystkimi plikami niezbędnymi do uruchomienia z niego serwera.

Oto przykładowa sesja:

$ 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

Uruchom serwer bazy danych

„Serwer Postgres” to w zasadzie postmaster proces, który jest uruchamiany z lokalizacją katalogu klastra bazy danych. Ten postmaster proces w kolejce obejmuje wiele procesów, które wykonują różne czynności w tle, a także obsługują połączenia przychodzące. Możesz zobaczyć ten model procesu w akcji, przeglądając drzewo procesów systemowych za pomocą np. narzędzia takiego jak htop.

Aby rozpocząć proces postmaster dla nowego klastra bazy danych, użyj:

$ pg_ctl -D myclus -l myclus/log start

-l opcja określa lokalizację pliku dziennika Postgres, który w tym przypadku znajduje się w samym katalogu klastra. Nie jest niczym niezwykłym umieszczenie pliku dziennika w katalogu klastra.

Powinieneś zobaczyć taki wynik:

waiting for server to start.... done
server started

Ponowne ładowanie, ponowne uruchamianie i zatrzymywanie odbywa się zgodnie z oczekiwaniami:

$ 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

Teraz powinieneś być w stanie połączyć się z tym nowym klastrem za pomocą klientów takich jak psql i pgAdmin .

Ustawianie portu i innych opcji

Praktycznie jednak, jeśli masz już zainstalowany Postgres na swoim komputerze, prawdopodobnie będziesz musiał edytować myclus/postgres.conf i zmień wartości dla portu , unix_socket_directories a także może listen_address przed czystym uruchomieniem klastra. Dzieje się tak, ponieważ zainstalowany w systemie Postgresservice działa już na porcie 5432 i katalogach w unix_socket_directories nie może być zapisany przez zwykłego użytkownika. Domyślnylisten_address to localhost, co oznacza, że ​​nie będziesz w stanie połączyć się z klastrem z zewnątrz localhost.

Jeśli używasz pg_ctl do tworzenia i niszczenia klastrów w automatycznych skryptach testowych łatwiej jest określić te opcje bezpośrednio z wiersza poleceń niż programowo edytować myclus/postgres.conf .Możesz określić opcje w następujący sposób:

$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start

Spowoduje to uruchomienie serwera na porcie 6000, z gniazdem unix utworzonym w katalogu /tmp i nasłuchiwanie na wszystkich interfejsach.

Musisz określić te opcje tylko dla „start”, możesz je pominąć dla innych poleceń, w tym nawet „restart”.

Inne przydatne opcje uruchamiania

Istnieje kilka innych opcji, których możesz użyć wewnątrz „-o”, które mogą być przydatne:

  • -F wyłącza fsync, przydatne do szybszego wykonywania skryptów testowych
  • -B shared_bufffers ustaw wartość shared_buffers , przykład -B 100MB
  • -c conf_var=value ustaw dowolną wartość konfiguracyjną, przykład -c wal_level=logical

Oto przykład z niektórymi z tych zestawów:

$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start

Te opcje są właściwie opcjami wiersza poleceń postgres proces, którego pełna lista jest udokumentowana tutaj.

Uruchom bazę danych innej wersji Postgresa

EnterpriseDB hostuje gotowe pliki binarne dla różnych wersji Postgres dla różnych platform. To są tarballe bez instalatora.

Pobierz archiwum tar, które chcesz, rozpakuj, znajdź pg_ctl z nim binarny i użyj go do utworzenia klastra. pg_ctl automatycznie znajdzie powiązane pliki binarne initdb/postgres/inne, których potrzebuje do utworzenia/uruchomienia klastra.

Możesz tego użyć niezależnie i niezależnie od istniejącej instalacji PostgreSQL na komputerze.

Tworzenie usług w systemie Windows

pg_ctl jest dostępny na wszystkich platformach, w tym MacOS i Windows. W szczególności można go użyć do łatwego tworzenia usługi, którą można uruchamiać i zatrzymywać za pomocą Menedżera kontroli usług (SCM). Aby utworzyć usługę, użyj:

pg_ctl -D myclus -N myclus_service register

Tworzy to usługę automatycznego uruchamiania o nazwie „myclus_service”.

Ta funkcja jest dostępna tylko w Postgres v10 i nowszych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj i importuj zrzut tabeli (.sql) za pomocą pgAdmin

  2. Jak uciec z ciągu znaków podczas dopasowywania wzorca w PostgreSQL?

  3. 3 sposoby na wyświetlenie listy wszystkich procedur składowanych w bazie danych PostgreSQL

  4. BŁĄD:nie można uzyskać dostępu do pliku „$libdir/plpython2” – BŁĄD:nie można uzyskać dostępu do pliku „$libdir/plpython3”

  5. Jak mogę zaimportować plik .sql do mojej bazy danych postgres Heroku?