Při instalaci PostgreSQL není standardně připojení k databázi pomocí TCP/IP povoleno.
Když se pokusíte připojit z klienta ke vzdálené databázi PostgreSQL pomocí příkazu psql, může se zobrazit chybová zpráva „psql:nelze se připojit k serveru:Připojení odmítnuto“.
V následujícím příkladu se z klientského počítače pokoušíme připojit k databázi PostgreSQL, která běží na serveru 192.168.102.1. Jak vidíte z výstupu, jasně to říká, že vzdálená databáze PostgreSQL nepřijímá připojení.
# psql -U postgres -h 192.168.102.1 psql: could not connect to server: Connection refused Is the server running on host "192.168.102.1" and accepting TCP/IP connections on port 5432?
Chcete-li povolit připojení TCP/IP pro databázi PostgreSQL, musíte provést dva kroky uvedené níže.
1. Upravte soubor pg_hba.conf a přidejte záznam ověření klienta
Na databázovém serveru PostgreSQL si ve výchozím nastavení všimnete následujících záznamů na konci souboru /var/lib/pgsql/data/pg_hba.conf. Jak je uvedeno níže, přijímá připojení pouze z localhost.
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 ident
Přidejte následující řádek na server pg_hba.conf. To umožní připojení z ip-adresy „192.168.101.20“ (toto je klient v našem příkladu). Pokud chcete povolit připojení z více klientských počítačů v konkrétní síti, zadejte zde síťovou adresu ve formátu CIDR-adresy.
# vi /var/lib/pgsql/data/pg_hba.conf host all all 192.168.101.20/24 trust
Následují různé formáty záznamů autentizace klienta podporované v souboru pg_hba.conf. Používáme formát č. 2 z tohoto seznamu.
- metoda autentizace uživatele v místní databázi [autentizace-možnost]
- uživatel hostitelské databáze CIDR-address authentication-method [authentication-option]
- uživatel databáze hostssl CIDR-address authentication-method [authentication-option]
- uživatel databáze hostitelnossl CIDR-address authentication-method [authentication-option]
Místo formátu „CIDR-address“ můžete také zadat IP-adresu a masku sítě v samostatných polích pomocí následujícího formátu záznamu.
- IP-adresa hostitelské databáze IP-maska-metoda ověření [autentizace-možnost]
- IP-adresa uživatele databáze hostssl IP-maska-metoda ověření [autentizace-možnost]
- IP-adresa uživatele databáze hostnossl IP-maska-metoda ověření [authentication-option]
2. Změňte adresu pro poslech v postgresql.conf
Na databázovém serveru PostgreSQL bude ve výchozím nastavení naslouchací adresa v souboru postgresql.conf localhost, jak je uvedeno níže.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = 'localhost'
Upravte tento řádek a zadejte *. Pokud máte na serveru více rozhraní, můžete také určit konkrétní rozhraní, které má být nasloucháno.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
3. Otestujte vzdálené připojení
Nyní se přihlaste ke klientskému počítači 192.168.101.20 a proveďte vzdálené připojení psql k databázovému serveru PostgreSQL (192.168.102.1), jak je uvedeno níže. Tentokrát by to mělo fungovat.
# psql -U postgres -h 192.168.102.1 Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#
Pokud také nechcete pokaždé zadávat název hostitele v parametru příkazového řádku, můžete nastavit ip-adresu vzdálené databáze PostgreSQL v názvu proměnné prostředí PGHOST, jak je uvedeno níže.
# export PGHOST=192.168.102.1 # psql -U postgres Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#