psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "yourname" does not existলোকেদের বিভ্রান্ত করে কারণ তারা কখনই “আপনার নাম” হিসাবে সংযোগ করতে বলেনি। PostgreSQL আপনার অপারেটিং সিস্টেম ব্যবহারকারীর নামের সাথে ডাটাবেস ব্যবহারকারীর নাম ডিফল্ট করে, এবং যদি একটি ম্যাচিং ভূমিকা বিদ্যমান না থাকে, সংযোগ ব্যর্থ হয়।
📋 Table of Contents
- কেন এটা ঘটে
- দ্রুততম চেক – সার্ভার চলছে এবং পৌঁছানো যায় কিনা তা নিশ্চিত করুন।
- এটি স্থানীয় উন্নয়নের জন্য সঠিক সমাধান, কারণ এটি খালি করে তোলে
- ভূমিকা তৈরি করা প্রায়শই পরবর্তী ত্রুটি তৈরি করে, যা মানুষ একই সমস্যার জন্য ভুল করে।
- আপনি যদি আপনার OS ব্যবহারকারীর নামের সাথে মেলে এমন একটি ভূমিকা না চান, আপনি যেটি চান তা পাস করুন৷
- একটি পাত্রের ভিতরে, ভূমিকা যাই হোক না কেন
- লিনাক্সে, স্থানীয় সকেট সংযোগগুলি সাধারণত
- Homebrew's PostgreSQL আপনার macOS ব্যবহারকারীর নাম এবং একই নামের একটি ডাটাবেসের সাথে মেলে এমন একটি সুপার ইউজার তৈরি করে, তাই বেয়ার
- ধাপ 2 এবং 5 তুলনা করা প্রায় প্রতিটি ক্ষেত্রেই প্রশ্নের উত্তর দেয়।
- ত্রুটি
- উত্তর: কোনটিই নয়, কার্যকরীভাবে।
- এর সাথে কোন ভূমিকা বিদ্যমান তা পরীক্ষা করুন৷ , তুলনা করুন
কেন এটা ঘটে
যখন তুমি দৌড়াবেpsql কোন যুক্তি ছাড়াই, PostgreSQL তিনটি ডিফল্ট পূরণ করে:
- ব্যবহারকারীর নাম — আপনার OS ব্যবহারকারীর নাম
- ডাটাবেস — ব্যবহারকারীর নাম হিসাবে একই
- হোস্ট — স্থানীয় ইউনিক্স সকেট
সুতরাং এমন একটি মেশিনে যেখানে আপনি লগ ইন করেনalice, সরলpsql মানে “ডাটাবেসের সাথে সংযোগ করুনaliceভূমিকা হিসাবে “। একটি নতুন PostgreSQL ইনস্টল শুধুমাত্রaliceতৈরি করে সুপার ইউজার ভূমিকা, যাতে সংযোগ অবিলম্বে ব্যর্থ হয়।postgresঠিক 1: পোস্টগ্রেস ভূমিকা হিসাবে সংযুক্ত করুন
দ্রুততম চেক – সার্ভার চলছে এবং পৌঁছানো যায় কিনা তা নিশ্চিত করুন।
যদি এটি সংযোগ করে, সার্ভার ঠিক আছে এবং আপনাকে শুধুমাত্র আপনার ভূমিকা তৈরি করতে হবে।
# Linux: the postgres OS user maps to the postgres role
sudo -u postgres psql
# macOS with Homebrew: your own user is usually the superuser
psql postgres
# Explicit form that works anywhere
psql -U postgres -d postgres -h localhost
ফিক্স 2: আপনার ব্যবহারকারীর নামের সাথে মেলে এমন একটি ভূমিকা তৈরি করুন
এটি স্থানীয় উন্নয়নের জন্য সঠিক সমাধান, কারণ এটি খালি করে তোলে
আপনি যেভাবে আশা করেছিলেন সেভাবে কাজ করুন।psqlঅথবা এসকিউএল-এ, যা আপনি যা দিচ্ছেন সে সম্পর্কে স্পষ্ট:
# From the shell
sudo -u postgres createuser --interactive --pwprompt
# It will ask:
# Enter name of role to add: alice
# Enter password for new role: ****
# Shall the new role be a superuser? (y/n) n
# Shall the new role be allowed to create databases? (y/n) y
# Shall the new role be allowed to create more new roles? (y/n) n
অপরিহার্য এবং মিস করা সহজ।
sudo -u postgres psql
CREATE ROLE alice WITH LOGIN PASSWORD 'a-strong-password';
ALTER ROLE alice CREATEDB;
\q
LOGIN এটি ছাড়া একটি গ্রুপ ভূমিকা তৈরি করে যা সংযোগ করতে পারে না এবং আপনি একটি ভিন্ন বিভ্রান্তিকর ত্রুটি পান।CREATE ROLE alice;ফিক্স 3: ম্যাচিং ডাটাবেসটিও বিদ্যমান থাকতে হবে
ভূমিকা তৈরি করা প্রায়শই পরবর্তী ত্রুটি তৈরি করে, যা মানুষ একই সমস্যার জন্য ভুল করে।
এটি তৈরি করুন, বা সর্বদা স্পষ্টভাবে একটি ডাটাবেসের নাম দিন।
psql
# psql: FATAL: database "alice" does not exist
ঠিক 4: ব্যবহারকারীকে স্পষ্টভাবে উল্লেখ করুন
createdb alice
# Or specify one every time
psql -d postgres
আপনি যদি আপনার OS ব্যবহারকারীর নামের সাথে মেলে এমন একটি ভূমিকা না চান, আপনি যেটি চান তা পাস করুন৷
উল্লেখ্য যে
psql -U myapp -d myapp_development -h localhost
# Or set it in the environment for the session
export PGUSER=myapp
export PGDATABASE=myapp_development
export PGHOST=localhost
psql
একটি ইউনিক্স সকেটের উপরে আপনার প্রমাণীকরণ কনফিগারেশনের উপর নির্ভর করে এখনও ব্যর্থ হতে পারে — দেখুন-U নীচের অধ্যায়।peerফিক্স 5: ডকার এবং ডকার-কম্পোজ
একটি পাত্রের ভিতরে, ভূমিকা যাই হোক না কেন
ভলিউম প্রথম শুরু হলে নির্দিষ্ট করা হয়েছে।POSTGRES_USERফাঁদ:
services:
db:
image: postgres:17
environment:
POSTGRES_USER: myapp
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp_development
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
# Connect from the host
psql -U myapp -d myapp_development -h localhost -p 5432
# Connect inside the container
docker compose exec db psql -U myapp -d myapp_development
এই এনভায়রনমেন্ট ভেরিয়েবলগুলি তখনই কার্যকর হয় যখন ডেটা ডিরেক্টরি খালি থাকে। যদি তুমি বদলে যাও বিদ্যমান ভলিউমে, কিছুই ঘটে না এবং আপনি পুরানো ভূমিকা পেতে থাকেন। এটি প্রয়োগ করতে ভলিউম পুনরায় তৈরি করুন।POSTGRES_USERপিয়ার প্রমাণীকরণ বোঝা
# Destroys the database contents — make sure that is acceptable
docker compose down -v
docker compose up -d
লিনাক্সে, স্থানীয় সকেট সংযোগগুলি সাধারণত
ব্যবহার করে প্রমাণীকরণ, যার জন্য ডাটাবেসের ভূমিকার নাম প্রয়োজন OS ব্যবহারকারীর নামের সাথে হুবহু মেলে। এই কারণেইpeer কাজ করার সময়sudo -u postgres psql যেমন আপনার নিজের ব্যবহারকারী করে না।psql -U postgresপরিবর্তন করা হচ্ছে
# Find the config file
sudo -u postgres psql -c 'SHOW hba_file;'
# e.g. /etc/postgresql/17/main/pg_hba.conf
# pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# peer: OS username must equal the role name
local all all peer
# scram-sha-256: password authentication, any username
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
লাইন থেকেlocal যাকscram-sha-256 একটি পাসওয়ার্ড দিয়ে সকেটের উপর কাজ করুন। পরে পুনরায় লোড করুন — ফাইলটি স্বয়ংক্রিয়ভাবে পুনরায় পড়া হয় না।-Uবদলাও না
sudo systemctl reload postgresql
# or
sudo -u postgres psql -c 'SELECT pg_reload_conf();'
. এটি যেকোনো স্থানীয় ব্যবহারকারীকে সুপার ব্যবহারকারী সহ কোনো পাসওয়ার্ড ছাড়াই যেকোনো ভূমিকা হিসেবে সংযোগ করতে দেয়।peer to trustmacOS নির্দিষ্টকরণ
Homebrew’s PostgreSQL আপনার macOS ব্যবহারকারীর নাম এবং একই নামের একটি ডাটাবেসের সাথে মেলে এমন একটি সুপার ইউজার তৈরি করে, তাই বেয়ার
সাধারণত কাজ করে। Postgres.app একই রকম আচরণ করে। আপনি যদি macOS-এ এই ত্রুটিটি দেখতে পান, সাধারণ কারণগুলি হল পরিষেবাটি চলছে না বা একটি পুরানো ইনস্টলেশন নতুনটিকে ছায়া দিচ্ছে৷psqlপদ্ধতিগতভাবে রোগ নির্ণয়
brew services list
brew services start postgresql@17
# Check which psql is first on PATH
which psql
psql --version
ধাপ 2 এবং 5 তুলনা করা প্রায় প্রতিটি ক্ষেত্রেই প্রশ্নের উত্তর দেয়।
# 1. Is the server running?
pg_isready
# /tmp:5432 - accepting connections
# 2. Which roles exist?
sudo -u postgres psql -c '\du'
# 3. Which databases exist?
sudo -u postgres psql -c '\l'
# 4. What is psql defaulting to?
psql -d postgres -c 'SELECT current_user, current_database();'
# 5. What is your OS username?
whoami
সম্পর্কিত ত্রুটি
ত্রুটি
| অর্থ | এমন কোন ভূমিকা নেই – এটি তৈরি করুন |
|---|---|
role "x" does not exist |
ভূমিকা বিদ্যমান, ডাটাবেস নেই — |
database "x" does not exist |
ভূমিকা ছাড়া সৃষ্টিcreatedb x |
role "x" is not permitted to log in |
ভূমিকা বিদ্যমান, ভুল পাসওয়ার্ডLOGIN |
password authentication failed |
সার্ভার চলছে না বা ভুল হোস্ট/পোর্ট |
could not connect to server |
OS ব্যবহারকারীর নাম ভূমিকার সাথে মেলে না প্রায়শই জিজ্ঞাসিত প্রশ্ন |
Peer authentication failed |
প্রশ্ন: ভূমিকা এবং ব্যবহারকারীর মধ্যে পার্থক্য কী? |
উত্তর: কোনটিই নয়, কার্যকরীভাবে।
সংক্ষেপে . PostgreSQL ব্যবহারকারী এবং গ্রুপ উভয়ের জন্য “ভূমিকা” ব্যবহার করে।
প্রশ্ন: আমি কি আমার বিকাশের ভূমিকাকে সুপার ইউজার করতে পারি?CREATE USERউত্তর: একটি সম্পূর্ণ স্থানীয় ডাটাবেসের জন্য, এটি সুবিধাজনক। অন্যদের দ্বারা পৌঁছানো যায় এমন কিছুর জন্য এটি কখনই করবেন না এবং কখনও এমন ভূমিকার জন্য করবেন না যার সাথে আপনার অ্যাপ্লিকেশন সংযোগ করে।CREATE ROLE ... WITH LOGINপ্রশ্নঃ কেন এটি ডকারে কাজ করে কিন্তু হোস্টে নয়?
উত্তর: বিভিন্ন সার্ভার। ধারকটির নিজস্ব ভূমিকা সহ নিজস্ব PostgreSQL রয়েছে। হোস্ট থেকে সংযোগের জন্য পোর্ট ম্যাপিং এবং কন্টেইনারের শংসাপত্র প্রয়োজন।
প্রশ্ন: আমার অ্যাপটি ভাল সংযোগ করে কিন্তু psql করে না। কেন?
উত্তর: অ্যাপটিতে একটি সুস্পষ্ট ব্যবহারকারীর নাম, পাসওয়ার্ড এবং হোস্ট সহ একটি সংযোগ স্ট্রিং রয়েছে৷ খালি
ডিফল্ট ব্যবহার করে। আপনার অ্যাপের সংযোগ স্ট্রিং থেকে ভূমিকার নামটি পড়ুন এবং এটিকে
দিয়ে পাস করুন৷ প্রশ্ন: আমি কীভাবে একটি ভূমিকার পাসওয়ার্ড পরিবর্তন করব?
সুপার ইউজার হিসাবে।psqlউপসংহার-U.
এই ত্রুটির অর্থ PostgreSQL এমন একটি ভূমিকা প্রমাণীকরণ করার চেষ্টা করেছে যা বিদ্যমান নেই — প্রায় সবসময় কারণ
A: ALTER ROLE alice WITH PASSWORD 'new-password'; আপনার OS ব্যবহারকারীর নাম ডিফল্ট।
এর সাথে কোন ভূমিকা বিদ্যমান তা পরীক্ষা করুন৷ , তুলনা করুন
, তারপর হয়psqlএর সাথে একটি ম্যাচিং ভূমিকা তৈরি করুন৷ অথবা পাস স্পষ্টভাবে\du স্পষ্টভাবেwhoami স্পষ্টভাবেLOGIN স্পষ্টভাবে-U স্পষ্টভাবেলিনাক্সে, মনে রাখবেন যেpeer প্রমাণীকরণের জন্য নামগুলি স্থানীয় সকেটগুলির সাথে মিলিত হওয়া প্রয়োজন; ডকারে, মনে রাখবেন যেPOSTGRES_USER ভলিউম প্রথম তৈরি করা হলে শুধুমাত্র প্রযোজ্য.
🔗 Share this article
✍️ Leave a Comment