Troubleshooting: Database

عام database connection اور query مسائل ٹھیک کریں۔

Connection Refused

Error: ECONNREFUSED 127.0.0.1:5432 یا connect ECONNREFUSED 127.0.0.1:27017

اس error کا مطلب ہے 1DevTool نے آپ کی connection string میں host اور port تک پہنچنے کی کوشش کی، لیکن وہاں کچھ سن نہیں رہا تھا۔ database سرور یا تو نہیں چل رہا یا مختلف port پر سن رہا ہے۔

حل:

  • چیک کریں کہ database چل رہا ہے۔ PostgreSQL کے لیے: Terminal میں pg_ctl status چلائیں۔ MySQL کے لیے: mysqladmin status۔ Redis کے لیے: redis-cli ping (آپ کو PONG ملنا چاہیے)۔ اگر سرویس بند ہے تو شروع کریں۔
  • Port چیک کریں۔ Default ports ہیں 5432 (PostgreSQL)، 3306 (MySQL/MariaDB)، 27017 (MongoDB)، اور 6379 (Redis)۔ اپنی DATABASE_URL میں port کو اس port سے compare کریں جو آپ کا database actually استعمال کر رہا ہے۔
  • Docker containers۔ اگر آپ کا database Docker کے اندر چل رہا ہے، تو docker ps سے چیک کریں کہ container چل رہا ہے۔ اگر listed نہیں ہے، تو docker start <container-name> سے شروع کریں۔ یہ بھی تصدیق کریں کہ container کا port آپ کے host کو publish ہے (docker ps output میں 0.0.0.0:5432->5432/tcp تلاش کریں)۔

Authentication Failed

Error: password authentication failed for user "postgres" یا Access denied for user 'root'@'localhost'

آپ کی connection string میں username یا password اس سے match نہیں کرتا جو database سرور expect کرتا ہے۔

حل:

  • اپنی DATABASE_URL یا connection settings میں username اور password دوبارہ چیک کریں۔ اپنے Supabase account password کو database password سے confuse کرنا آسان ہے — وہ مختلف ہیں۔ Settings → Database کے تحت Supabase dashboard میں دکھایا گیا password استعمال کریں۔
  • Passwords میں special characters۔ اگر آپ کے password میں @، #، /، یا : ہیں، تو یہ characters connection string میں URL-encoded ہونے چاہییں۔ مثال کے طور پر، @ بن جاتی ہے %40 اور # بن جاتی ہے %23۔ p@ss#word جیسا password URL میں p%40ss%23word لکھا جائے گا۔

SSL/TLS Required

Error: SSL connection has been closed unexpectedly یا server requires SSL but client does not support it

بہت سے cloud database providers (Supabase، Neon، Railway، Render) encrypted connections کا تقاضا کرتے ہیں۔

حل: اپنی PostgreSQL connection string کے آخر میں ?sslmode=require شامل کریں:

postgresql://user:pass@host:5432/db?sslmode=require

MongoDB Atlas کے لیے، اپنی connection string میں mongodb+srv:// scheme استعمال کریں — یہ TLS خودکار طریقے سے enable کرتا ہے اور کوئی اضافی parameter نہیں چاہیے۔


Query Timeout ہو جاتی ہے

وجہ: query بہت زیادہ data scan کر رہی ہے، یا 1DevTool اور database کے درمیان network connection query کے بیچ میں ٹوٹ گیا۔

حل:

  • data explore کرتے وقت اپنی query میں LIMIT clause شامل کریں۔ مثال کے طور پر: SELECT * FROM orders LIMIT 100۔
  • اگر کوئی مخصوص query ہمیشہ slow ہو، تو چیک کریں کہ آپ کے WHERE clause کے columns میں indexes ہیں یا نہیں۔ SQL editor میں EXPLAIN ANALYZE <your query> چلانا آپ کو query plan دکھائے گا۔
  • اگر timeouts intermittently ہوں، تو اپنا network چیک کریں۔ خاص طور پر VPN connections database connectivity کو flaky بنا سکتے ہیں۔

MongoDB: Password میں Special Characters

اگر آپ کے MongoDB password میں @، /، :، یا # ہیں، تو آپ کو connection string میں ان characters کو URL-encode کرنا ہوگا۔ ان characters کا URL میں خاص مطلب ہوتا ہے اور اگر literally استعمال کیے جائیں تو parsing توڑ دیں گے۔

عام encodings: @%40، #%23، /%2F، :%3A۔

مثال: my@secret#pass کا password connection string میں my%40secret%23pass بن جاتا ہے۔


Docker Container سے Connect نہیں ہو سکتا

اگر آپ کا database Docker container کے اندر چل رہا ہے اور آپ 1DevTool (جو آپ کی host مشین پر چلتا ہے) سے connect کرنے کی کوشش کر رہے ہیں، تو اپنی connection string میں localhost استعمال نہ کریں۔ host سے، localhost host مشین کو refer کرتا ہے — container کو نہیں۔

اس کی بجائے host.docker.internal استعمال کریں:

postgresql://user:[email protected]:5432/db

یہ special hostname Docker کے اندر سے ہمیشہ آپ کی host مشین کو resolve کرتا ہے، اور host side سے صحیح loopback interface کو۔