PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

/docker-entrypoint-initdb.d/db_init.sh में psql कमांड चलाते समय त्रुटि (psql:सर्वर से कनेक्ट नहीं हो सका:कनेक्शन अस्वीकृत)

ऐसा लगता है कि आपकी स्क्रिप्ट को तोड़ दिया है।

व्याख्या:

PostgreSQL न केवल TCP/IP के माध्यम से, बल्कि UNIX सॉकेट के माध्यम से भी कनेक्शन स्वीकार कर सकता है। -h localhost तर्क बताता है psql UNIX सॉकेट के बजाय TCP कनेक्शन का उपयोग करने के लिए।

यदि आप वर्तमान में देखें docker-entrypoint.sh संस्करण, आप देखेंगे, कि स्क्रिप्ट के निष्पादन के दौरान /docker-entrypoint-initdb.d में PostgreSQL केवल UNIX सॉकेट पर सुनता है, और स्टार्टअप लॉग कहता है:

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

इसका मतलब है कि psql -h localhost डेटाबेस से कनेक्ट नहीं होगा, क्योंकि PostgreSQL IP सॉकेट पर नहीं सुनता है। आपको psql . का उपयोग करना चाहिए बिना -h localhost टीसीपी कनेक्शन के बजाय यूनिक्स सॉकेट का उपयोग करने का विकल्प।

लेकिन क्यों चल रहा है psql -h localhost मैन्युअल रूप से काम करता है?

यदि आप docker-entrypoint.sh में देखते हैं फिर से, आप देखेंगे कि जब सभी init स्क्रिप्ट निष्पादित की जाती हैं, तो PostgreSQL रुक गया और फिर शुरू किया फिर से सामान्य (परिचालन) मोड में, जिसमें यह UNIX और IP सॉकेट दोनों पर सुनता है:

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"

इसलिए, जब स्टार्टअप प्रक्रिया पूरी हो जाती है, तो आप TCP कनेक्शन का उपयोग करके PostgreSQL से जुड़ सकते हैं, इस प्रकार, कंटेनर में प्रवेश करके psql -h localhost चला सकते हैं। सफल होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में 2 तिथियों के बीच कार्य घंटों की गणना करें

  2. उपयोगकर्ता पोस्टग्रेज बनाने में असमर्थ:भूमिका पोस्टग्रेज मौजूद नहीं है

  3. Windows पर PostgreSQL ODBC सेट करना

  4. PostgreSQL प्रतिकृति 101 के लिए विफलता

  5. postgresql डुप्लीकेट कुंजी अद्वितीय बाधा का उल्लंघन करती है