sql >> Databáze >  >> RDS >> PostgreSQL

Chyba při spouštění příkazu psql v /docker-entrypoint-initdb.d/db_init.sh (psql:nelze se připojit k serveru:připojení odmítnuto)

Vypadá to jako porušil váš skript.

Vysvětlení:

PostgreSQL může přijímat připojení nejen přes TCP/IP, ale také přes UNIX socket. -h localhost argument říká psql používat připojení TCP místo soketu UNIX.

Pokud se podíváte na aktuální docker. verze, uvidíte, že během provádění skriptů v /docker-entrypoint-initdb.d PostgreSQL naslouchá pouze na UNIX socketu a spouštěcí protokol říká:

LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

To znamená, že psql -h localhost se nepřipojí k databázi, protože PostgreSQL nenaslouchá na IP soketu. Musíte použít psql bez -h localhost možnost, aby používal soket UNIX místo připojení TCP.

Ale proč spouštět psql -h localhost pracuje ručně?

Pokud se podíváte do docker-entrypoint.sh znovu uvidíte, že když jsou provedeny všechny init skripty, PostgreSQL je zastaveno a poté začal opět v normálním (provozním) režimu, ve kterém poslouchá na UNIX i IP socketech:

LOG:  listening on IPv4 address "0.0.0.0", port 5432
LOG:  listening on IPv6 address "::", port 5432
LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Po dokončení procesu spouštění se tedy můžete připojit k PostgreSQL pomocí připojení TCP, tedy vstoupit do kontejneru a spustit psql -h localhost uspěje.




  1. Jak často byste měli zálohovat své databáze?

  2. Migrace z Maxscale na ProxySQL Load Balancer

  3. "aktivní" příznak nebo ne?

  4. Jak vložit více řádků pomocí funkce v PostgreSQL