sql >> Database >  >> RDS >> PostgreSQL

Fout bij het uitvoeren van de opdracht psql in /docker-entrypoint-initdb.d/db_init.sh (psql:kon geen verbinding maken met server:verbinding geweigerd)

Het ziet eruit als

Uitleg:

PostgreSQL accepteert mogelijk niet alleen verbindingen via TCP/IP, maar ook via UNIX-socket. De -h localhost argument vertelt psql om TCP-verbindingen te gebruiken in plaats van UNIX-socket.

Als je kijkt naar de huidige docker-entrypoint.sh versie zult u zien dat tijdens het uitvoeren van scripts in /docker-entrypoint-initdb.d PostgreSQL luistert alleen op de UNIX-socket en het opstartlogboek zegt:

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

Dit betekent dat psql -h localhost zal geen verbinding maken met de database, omdat PostgreSQL niet luistert op de IP-socket. U moet psql . gebruiken zonder -h localhost optie om het UNIX-socket te laten gebruiken in plaats van TCP-verbindingen.

Maar waarom het uitvoeren van psql -h localhost handmatig werkt?

Als je de docker-entrypoint.sh . bekijkt nogmaals, je zult zien dat wanneer alle init-scripts zijn uitgevoerd, PostgreSQL wordt gestopt en toen begon opnieuw in de normale (operationele) modus, waarin het zowel op UNIX- als op IP-sockets luistert:

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"

Dus wanneer het opstartproces is voltooid, kunt u verbinding maken met PostgreSQL met behulp van TCP-verbindingen, dus de container binnengaan en psql -h localhost uitvoeren slaagt.




  1. Twee tellingen krijgen en ze vervolgens delen

  2. Meten van "Observer Overhead" van SQL Trace versus uitgebreide gebeurtenissen

  3. De PostgreSQL-systeemcatalogus begrijpen en lezen

  4. Een datetime-equivalent in java.sql ? (is er een java.sql.datetime?)