দীর্ঘ-চলমান ডেটাবেস শ্রোতাদের মধ্যে সংযোগের স্বাস্থ্য বজায় রাখা
এটির চিত্র: আপনি একটি সিস্টেম স্থাপন করেছেন যা আপনার PostgreSQL ডাটাবেস থেকে সময়মত বিজ্ঞপ্তি পাওয়ার উপর নির্ভর করে। হঠাৎ, নীরবতা পর্যন্ত সবকিছু সপ্তাহ ধরে মসৃণভাবে চলছে। 🕰️ বিজ্ঞপ্তি প্রদানের জন্য আপনি যে সংযোগটি বিশ্বাস করেছিলেন তা ব্যর্থ হয়েছে এবং আপনি এটি আসতে দেখেননি৷
অনেক ডেভেলপারদের জন্য, এই দৃশ্যকল্প শুধুমাত্র অনুমানমূলক নয়। ব্যবহার করে দীর্ঘ-চলমান প্রক্রিয়া নিয়ে কাজ করার সময় psycopg3এর conn.notifies(), সংযোগের স্বাস্থ্য নিশ্চিত করা গুরুতর। তবুও, অফিসিয়াল ডকুমেন্টেশন কিছু প্রশ্নের উত্তর দেয় না, বিশেষ করে যখন একটি সংযোগ প্রতিক্রিয়াহীন বা দূষিত হয়ে যায় তখন কী হয়।
এটি আমাদের একটি গুরুত্বপূর্ণ প্রশ্নে নিয়ে আসে: আপনি কীভাবে আপনার কর্মপ্রবাহকে বাধা না দিয়ে কার্যকর স্বাস্থ্য পরীক্ষা বাস্তবায়ন করবেন? নোটিফিকেশন জেনারেটর পুনরায় চালু করা বা নিরাপদ স্বাস্থ্য পরীক্ষা করার মতো কৌশলগুলি মধ্য-শ্রবণ বিজ্ঞপ্তির ক্ষতি এড়াতে অপরিহার্য হাতিয়ার হয়ে উঠেছে।
এই নিবন্ধে, আমরা PostgreSQL-এ দীর্ঘ-চলমান বিজ্ঞপ্তি শ্রোতাদের পরিচালনার সূক্ষ্মতাগুলি অন্বেষণ করব। আমরা ব্যবহারিক উদাহরণগুলিতে ডুব দেব, যার মধ্যে সংযোগের বাধাগুলি পরিচালনা করা এবং স্বাস্থ্য পরীক্ষা অপ্টিমাইজ করা সহ, যাতে আপনার অ্যাপ্লিকেশনটি শক্তিশালী এবং নির্ভরযোগ্য থাকে - এটি যতক্ষণই চলুক না কেন। ⚙️
আদেশ | ব্যবহারের উদাহরণ |
---|---|
psycopg.connect | PostgreSQL ডাটাবেসের সাথে একটি সিঙ্ক্রোনাস সংযোগ স্থাপন করতে ব্যবহৃত হয়। এটি একটি পাইথন প্রসঙ্গের মধ্যে এসকিউএল কমান্ডের সরাসরি সঞ্চালন এবং ডাটাবেস অপারেশন পরিচালনা করার অনুমতি দেয়। |
AsyncConnection.connect | PostgreSQL ডাটাবেসের সাথে একটি অ্যাসিঙ্ক্রোনাস সংযোগ তৈরি করে। দীর্ঘ-চলমান শ্রোতা বা অন্যান্য অ্যাসিঙ্ক্রোনাস কাজগুলি পরিচালনা করার সময় এটি অ-ব্লকিং অপারেশনগুলির জন্য গুরুত্বপূর্ণ। |
sql.SQL | গতিশীলভাবে SQL কমান্ড নির্মাণের একটি নিরাপদ উপায় প্রদান করে। এসকিউএল ইনজেকশন ঝুঁকি ছাড়াই প্যারামিটারাইজড প্রশ্ন বা LISTEN-এর মতো কমান্ড তৈরি করার জন্য এটি বিশেষভাবে কার্যকর। |
conn.notifies | PostgreSQL সার্ভার থেকে বিজ্ঞপ্তি তৈরি করে। এটি অ্যাপ্লিকেশনটিকে নির্দিষ্ট ইভেন্ট বা বার্তা শোনার অনুমতি দেয়, এটিকে রিয়েল-টাইম ডেটা আপডেটের সাথে অবিচ্ছেদ্য করে তোলে। |
timeout | বিজ্ঞপ্তি জেনারেটরের জন্য একটি বিজ্ঞপ্তি পাওয়ার জন্য সর্বাধিক অপেক্ষার সময় সেট করে। এটি অনির্দিষ্টকালের অবরোধ প্রতিরোধে সহায়তা করে এবং পর্যায়ক্রমিক স্বাস্থ্য পরীক্ষার অনুমতি দেয়। |
asyncio.run | একটি অ্যাসিঙ্ক্রোনাস প্রধান ফাংশন বা ইভেন্ট লুপ চালু করে। অ্যাসিঙ্ক্রোনাস কাজগুলি পরিচালনার জন্য অপরিহার্য, বিশেষ করে যখন psycopg3-এ AsyncConnection-এর সাথে কাজ করা হয়। |
unittest.mock.patch | অস্থায়ীভাবে পরীক্ষার উদ্দেশ্যে একটি মডিউল বা বস্তু প্রতিস্থাপন করে। এই প্রসঙ্গে, এটি একটি লাইভ ডাটাবেস অ্যাক্সেস না করেই ডাটাবেস সংযোগ এবং বিজ্ঞপ্তিগুলি অনুকরণ করতে ব্যবহৃত হয়। |
MagicMock | unittest.mock লাইব্রেরি থেকে একটি হেল্পার ক্লাস যা মক অবজেক্ট তৈরি করে। এটি ইউনিট পরীক্ষার সময় ডাটাবেস সংযোগ আচরণ অনুকরণ করতে এখানে ব্যবহৃত হয়। |
conn.execute | PostgreSQL সংযোগে এসকিউএল কমান্ড নির্বাহ করে। এটি লিসেন বা SELECT 1-এর মতো প্রশ্ন সহ স্বাস্থ্য পরীক্ষা করার মতো অপারেশন করতে ব্যবহৃত হয়। |
SELECT 1 | স্বাস্থ্য পরীক্ষার সময় ডাটাবেস সংযোগ এখনও সক্রিয় এবং প্রতিক্রিয়াশীল তা যাচাই করতে ব্যবহৃত একটি সাধারণ প্রশ্ন। |
নির্ভরযোগ্য বিজ্ঞপ্তি পরিচালনার জন্য Psycopg3 বোঝা
প্রদত্ত স্ক্রিপ্টগুলি দীর্ঘ-চলমান PostgreSQL সংযোগগুলিতে একটি সাধারণ চ্যালেঞ্জ মোকাবেলা করার লক্ষ্য রাখে: বিজ্ঞপ্তি শোনার সময় নির্ভরযোগ্যতা বজায় রাখা। সিঙ্ক্রোনাস পদ্ধতি ডাটাবেসের সাথে একটি স্থিতিশীল চ্যানেল স্থাপন করতে psycopg3 এর সংযোগ বস্তু ব্যবহার করে। লাইক কমান্ডের মাধ্যমে শুনুন এবং অবহিত করে, এটি নিশ্চিত করে যে অ্যাপ্লিকেশনটি ডাটাবেস থেকে রিয়েল-টাইম ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে পারে। উদাহরণস্বরূপ, একটি স্টক ট্রেডিং সিস্টেম কল্পনা করুন যেখানে আপডেটগুলি অবিলম্বে পদক্ষেপগুলিকে ট্রিগার করতে হবে। একটি স্বাস্থ্য পরীক্ষা প্রক্রিয়া ছাড়া, একটি সংযোগ ব্যর্থতা সুযোগ মিস বা উল্লেখযোগ্য ক্ষতি হতে পারে. 🛠️
স্ক্রিপ্টগুলির একটি মূল বৈশিষ্ট্য হল স্বাস্থ্য পরীক্ষা প্রক্রিয়া। এটি একটি লাইটওয়েট ক্যোয়ারী চালানো জড়িত, যেমন 1 নির্বাচন করুনসংযোগের প্রতিক্রিয়া যাচাই করতে। চেক সফল হলে, শ্রোতা নিরবচ্ছিন্নভাবে পুনরায় শুরু করে। যাইহোক, যদি সংযোগটি প্রতিক্রিয়াহীন হয়, তবে স্বাস্থ্য পরীক্ষা সমস্যাগুলি সনাক্ত করতে এবং সম্ভাব্যভাবে পুনরুদ্ধার করতে সহায়তা করে। উদাহরণস্বরূপ, একটি লজিস্টিক প্ল্যাটফর্মের জন্য একটি বিজ্ঞপ্তি সিস্টেমে, একটি হারানো সংযোগ প্যাকেজ ট্র্যাকিং সম্পর্কে সমালোচনামূলক আপডেটগুলি বিলম্বিত করতে পারে।
অ্যাসিঙ্ক্রোনাস স্ক্রিপ্ট পাইথনের সুবিধার মাধ্যমে এই ধারণাটিকে আরও এগিয়ে নিয়ে যায় asyncio কাঠামো এই পদ্ধতিটি নন-ব্লকিং ক্রিয়াকলাপ নিশ্চিত করে, বিজ্ঞপ্তির জন্য অপেক্ষা করার সময় সিস্টেমটিকে অন্যান্য কাজগুলি পরিচালনা করার অনুমতি দেয়। এটি আধুনিক, মাপযোগ্য অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে কার্যকর যেখানে প্রতিক্রিয়াশীলতা মূল। একটি চ্যাটবট সম্পর্কে চিন্তা করুন যা বার্তা বিতরণের জন্য রিয়েল-টাইম বিজ্ঞপ্তির প্রয়োজন; অ্যাসিঙ্ক্রোনাস হ্যান্ডলিং ব্যবহার করে নিশ্চিত করে যে সিস্টেম আপডেটগুলি প্রক্রিয়া করার সময় ব্যবহারকারীরা বিলম্ব অনুভব করবেন না। 🚀
উভয় স্ক্রিপ্টই মডুলারিটি এবং পুনরায় ব্যবহারযোগ্যতার উপর জোর দেয়। বিকাশকারীরা এসকিউএল কমান্ড বা হেলথ চেক লজিক অদলবদল করে সহজেই এই টেমপ্লেটগুলিকে তাদের নিজস্ব ব্যবহারের ক্ষেত্রে মানিয়ে নিতে পারে। উপরন্তু, ইউনিট টেস্টিং নিশ্চিত করে যে এই স্ক্রিপ্টগুলি পরিবেশ জুড়ে নির্ভরযোগ্যভাবে কাজ করে, রানটাইম ত্রুটির সম্ভাবনা হ্রাস করে। আপনি একটি আর্থিক অ্যাপ বা একটি IoT ড্যাশবোর্ডের জন্য একটি বিজ্ঞপ্তি সিস্টেম তৈরি করছেন না কেন, এই পদ্ধতিগুলি সংযোগের স্বাস্থ্য এবং প্রতিক্রিয়াশীলতা বজায় রাখার জন্য একটি শক্তিশালী কাঠামো প্রদান করে।
দীর্ঘ-চলমান PostgreSQL শ্রোতাদের মধ্যে নির্ভরযোগ্য বিজ্ঞপ্তি নিশ্চিত করা
দীর্ঘস্থায়ী ডাটাবেস সংযোগগুলি পরিচালনা করতে পাইথন এবং সাইকোপজি 3 ব্যবহার করে ব্যাকএন্ড বাস্তবায়ন
import psycopg
from psycopg import sql
import time
CONN_STR = "postgresql://user:password@localhost/dbname"
def listen_notifications():
try:
with psycopg.connect(CONN_STR, autocommit=True) as conn:
listen_sql = sql.SQL("LISTEN {};").format(sql.Identifier("scheduler_test"))
conn.execute(listen_sql)
print("Listening for notifications...")
gen = conn.notifies(timeout=5)
for notification in gen:
print("Received notification:", notification)
perform_health_check(conn, listen_sql)
except Exception as e:
print("Error:", e)
def perform_health_check(conn, listen_sql):
try:
print("Performing health check...")
conn.execute("SELECT 1")
conn.execute(listen_sql)
except Exception as e:
print("Health check failed:", e)
if __name__ == "__main__":
listen_notifications()
বিকল্প পদ্ধতি: বর্ধিত প্রতিক্রিয়াশীলতার জন্য অ্যাসিঙ্ক্রোনাস সাইকোপজি3 ব্যবহার করা
Python এর asyncio এবং psycopg3 ব্যবহার করে অ্যাসিঙ্ক্রোনাস বাস্তবায়ন
import asyncio
from psycopg import AsyncConnection, sql
CONN_STR = "postgresql://user:password@localhost/dbname"
async def listen_notifications():
try:
async with AsyncConnection.connect(CONN_STR, autocommit=True) as conn:
listen_sql = sql.SQL("LISTEN {};").format(sql.Identifier("scheduler_test"))
await conn.execute(listen_sql)
print("Listening for notifications...")
gen = conn.notifies(timeout=5)
async for notification in gen:
print("Received notification:", notification)
await perform_health_check(conn, listen_sql)
except Exception as e:
print("Error:", e)
async def perform_health_check(conn, listen_sql):
try:
print("Performing health check...")
await conn.execute("SELECT 1")
await conn.execute(listen_sql)
except Exception as e:
print("Health check failed:", e)
if __name__ == "__main__":
asyncio.run(listen_notifications())
দৃঢ়তার জন্য ইউনিট পরীক্ষা
ইউনিটটেস্ট ব্যবহার করে ব্যাকএন্ড লজিকের জন্য পাইথন ইউনিট পরীক্ষা করে
import unittest
from unittest.mock import patch, MagicMock
class TestNotificationListener(unittest.TestCase):
@patch("psycopg.connect")
def test_listen_notifications(self, mock_connect):
mock_conn = MagicMock()
mock_connect.return_value.__enter__.return_value = mock_conn
mock_conn.notifies.return_value = iter(["test_notification"])
listen_notifications()
mock_conn.execute.assert_called_with("LISTEN scheduler_test;")
mock_conn.notifies.assert_called_once()
if __name__ == "__main__":
unittest.main()
বিজ্ঞপ্তিগুলির জন্য দীর্ঘ-চলমান PostgreSQL সংযোগগুলি অপ্টিমাইজ করা৷
দীর্ঘদিন ধরে চলমান PostgreSQL নোটিফিকেশন সিস্টেমের একটি প্রায়ই উপেক্ষিত দিক হল সম্পদের সীমাবদ্ধতা এবং বার্তা বাফারিংয়ের প্রভাব। ব্যবহার করার সময় psycopg3, লাইব্রেরি কীভাবে উচ্চ লোডের মধ্যে বিজ্ঞপ্তিগুলি পরিচালনা করে তা বোঝা গুরুত্বপূর্ণ। PostgreSQL সার্ভার ক্লায়েন্টদের জন্য বার্তাগুলিকে বাফার করে, কিন্তু ধীরগতির ক্লায়েন্ট ব্যবহারের কারণে অতিরিক্ত বাফারিংয়ের ফলে বিজ্ঞপ্তিগুলি বাদ দেওয়া হতে পারে। আইওটি ডিভাইসগুলি পর্যবেক্ষণ করার মতো পরিস্থিতিতে এটি বিশেষভাবে গুরুত্বপূর্ণ, যেখানে অনুপস্থিত আপডেটগুলি অপারেশনাল অদক্ষতার কারণ হতে পারে।
একটি কার্যকর সমাধান হল ছোট টাইমআউট ব্যবহার করা conn.notifies() পর্যায়ক্রমে ফ্লাশ করা এবং বিজ্ঞপ্তিগুলি প্রক্রিয়া করা। যদিও এই পদ্ধতিটি সময়মত বার্তা পরিচালনা নিশ্চিত করে, এটি মাঝে মাঝে স্বাস্থ্য পরীক্ষার সুযোগও প্রবর্তন করে। উদাহরণস্বরূপ, একটি ই-কমার্স প্ল্যাটফর্মে, অর্ডার আপডেটের জন্য নোটিফিকেশনের সময়মত প্রক্রিয়াকরণ গ্রাহকের সন্তুষ্টি নিশ্চিত করে, যখন পর্যায়ক্রমিক চেকগুলি অবিলম্বে সংযোগ সমস্যাগুলি সনাক্ত করতে এবং সমাধান করতে সহায়তা করে। ⚡
আরেকটি বিবেচনা ডাটাবেস সংযোগ সঠিক পরিষ্কার করা হয়. পাইথনের প্রসঙ্গ ম্যানেজার ব্যবহার করে (সঙ্গে বিবৃতি) শুধুমাত্র একটি সর্বোত্তম অভ্যাসই নয় বরং এটি নিশ্চিত করে যে কোনও ব্যতিক্রম ঘটলেও সংস্থানগুলি প্রকাশ করা হয়। সাবস্ক্রিপশন পরিষেবাগুলির মতো দীর্ঘমেয়াদী প্রক্রিয়াগুলিতে এটি বিশেষভাবে প্রাসঙ্গিক, যেখানে সংযোগগুলি কয়েক মাস ধরে সক্রিয় থাকতে পারে। শক্তিশালী ত্রুটি-হ্যান্ডলিং মেকানিজম এম্বেড করে, বিকাশকারীরা তাদের অ্যাপ্লিকেশনগুলিকে অপ্রত্যাশিত ব্যর্থতার জন্য স্থিতিস্থাপক করে তুলতে পারে।
PostgreSQL বিজ্ঞপ্তি শ্রোতাদের পরিচালনার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
- উদ্দেশ্য কি conn.notifies() psycopg3 এ?
- conn.notifies() PostgreSQL সার্ভার দ্বারা প্রেরিত বিজ্ঞপ্তিগুলি পুনরুদ্ধার করতে ব্যবহৃত হয়, অ্যাপ্লিকেশনগুলিতে রিয়েল-টাইম ইভেন্ট পরিচালনা সক্ষম করে।
- পারে LISTEN কমান্ড পুনঃসংযোগের সময় বার্তা হারায়?
- না, PostgreSQL বিজ্ঞপ্তিগুলিকে বাফার করে, তাই পুনঃসংযোগের সময় বার্তাগুলি হারিয়ে যায় না৷ তবে এর সঠিক হ্যান্ডলিং notifies নির্বিঘ্ন প্রক্রিয়াকরণ নিশ্চিত করতে জেনারেটর প্রয়োজন।
- আমি কেন ব্যবহার করা উচিত autocommit=True?
- সেটিং autocommit=True সংযোগকে অবিলম্বে যেমন কমান্ড প্রয়োগ করার অনুমতি দেয় LISTEN একটি সুস্পষ্ট প্রতিশ্রুতির জন্য অপেক্ষা না করে, প্রতিক্রিয়াশীলতা উন্নত করা।
- দীর্ঘক্ষণ চলাকালীন আমি কীভাবে স্বাস্থ্য পরীক্ষা করতে পারি notifies প্রক্রিয়া?
- আপনি পর্যায়ক্রমে লাইটওয়েট প্রশ্নগুলি চালাতে পারেন যেমন SELECT 1 সংযোগটি প্রতিক্রিয়াশীল থাকে তা নিশ্চিত করতে।
- ডাটাবেস সংযোগগুলি পরিষ্কার করার জন্য সর্বোত্তম অনুশীলনগুলি কী কী?
- ব্যবহার করে a with স্টেটমেন্ট বা পাইথনের কনটেক্সট ম্যানেজার নিশ্চিত করে যে সংযোগটি সঠিকভাবে বন্ধ করা হয়েছে, রিসোর্স লিক এড়ানো।
- কিভাবে আমি টাইমআউট ব্যতিক্রমগুলি পরিচালনা করব conn.notifies()?
- মোড়ানো conn.notifies() টাইমআউট ব্যতিক্রমগুলি ধরার জন্য ব্লক ব্যতীত চেষ্টা করুন এবং সেগুলিকে সুন্দরভাবে পরিচালনা করুন, যেমন লগিং বা পুনরায় চেষ্টা করে।
- psycopg3 কি বিজ্ঞপ্তির জন্য অ্যাসিঙ্ক্রোনাস অপারেশন সমর্থন করে?
- হ্যাঁ, psycopg3 এর মাধ্যমে একটি অ্যাসিঙ্ক্রোনাস API অফার করে AsyncConnection, যা নন-ব্লকিং, মাপযোগ্য অ্যাপ্লিকেশনের জন্য আদর্শ।
- আমি বন্ধ না করলে কি হবে notifies জেনারেটর?
- জেনারেটর বন্ধ করতে ব্যর্থ হলে মেমরি লিক হতে পারে বা রিসোর্স ঝুলে যেতে পারে, বিশেষ করে দীর্ঘ-চলমান প্রক্রিয়ায়।
- একটি সময় বিজ্ঞপ্তি মিস করা যেতে পারে pg_sleep() অপারেশন?
- হ্যাঁ, ঘুমের সময় উত্পন্ন বিজ্ঞপ্তিগুলি বাফার না হলে মিস হতে পারে, এই কারণেই এর সঠিক পরিচালনা LISTEN আদেশ অত্যন্ত গুরুত্বপূর্ণ।
- একাধিক বিজ্ঞপ্তির জন্য একই সংযোগ পুনরায় ব্যবহার করা কি নিরাপদ?
- হ্যাঁ, যতক্ষণ পর্যন্ত স্বাস্থ্য পরীক্ষা এবং যথাযথ পুনঃসংযোগ পরিচালনা করা হয়, একই সংযোগ পুনঃব্যবহার করা দক্ষ এবং সম্পদ-বান্ধব।
- আমি কিভাবে আমার বিজ্ঞপ্তি সিস্টেমের নির্ভরযোগ্যতা পরীক্ষা করতে পারি?
- লাইব্রেরি ব্যবহার করে ইউনিট পরীক্ষা লিখুন unittest.mock একটি লাইভ সার্ভারের উপর নির্ভর না করে বিজ্ঞপ্তি এবং ডাটাবেস আচরণ অনুকরণ করতে।
নির্ভরযোগ্য বিজ্ঞপ্তি শোনা নিশ্চিত করা
নিরবচ্ছিন্ন ক্রিয়াকলাপের জন্য দীর্ঘ-চলমান প্রক্রিয়াগুলির জন্য সংযোগের স্বাস্থ্য বজায় রাখা অপরিহার্য। psycopg3 এর মত টুল সহ conn.notifies(), বিকাশকারীরা শক্তিশালী বিজ্ঞপ্তি সিস্টেম বাস্তবায়ন করতে পারে। নিয়মিত স্বাস্থ্য পরীক্ষা অপ্রতিক্রিয়াশীল সংযোগ এড়াতে সাহায্য করে। উদাহরণগুলির মধ্যে রয়েছে বিভ্রাট প্রতিরোধ করার জন্য লাইভ আপডেটের জন্য ইনভেন্টরি সিস্টেমগুলি পর্যবেক্ষণ করা।
লাইটওয়েট এসকিউএল কমান্ডের সাথে মিলিত নোটিফাই জেনারেটর বন্ধ করা এবং পুনরায় খোলার ফলে কর্মক্ষমতা এবং নির্ভরযোগ্যতা উভয়ই নিশ্চিত হয়। এই কৌশলগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে প্রযোজ্য, লজিস্টিক আপডেট থেকে শুরু করে আর্থিক সতর্কতা পর্যন্ত। এই ধরনের কৌশলগুলি একটি নিরবচ্ছিন্ন ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে, ডাউনটাইমের বিরুদ্ধে সমালোচনামূলক অ্যাপ্লিকেশনগুলিকে রক্ষা করতে সহায়তা করে। ⚡
নির্ভরযোগ্য বিজ্ঞপ্তি পরিচালনার জন্য উত্স এবং তথ্যসূত্র
- অফিসিয়াল psycopg ডকুমেন্টেশনের উপর ভিত্তি করে psycopg3 ব্যবহার এবং সংযোগ স্বাস্থ্য পরীক্ষা সম্পর্কে বিশদ বর্ণনা করে। এ আরও পড়ুন Psycopg3 ডকুমেন্টেশন .
- PostgreSQL বিজ্ঞপ্তি এবং জেনারেটর আচরণ পরিচালনার বিষয়ে GitHub আলোচনার সম্প্রদায়ের অন্তর্দৃষ্টি থেকে সংগৃহীত বিশদ বিবরণ। এ থ্রেড এক্সপ্লোর করুন Psycopg GitHub আলোচনা .
- এসকিউএল কমান্ডের অনুসন্ধান এবং রিয়েল-টাইম অ্যাপ্লিকেশনগুলিতে তাদের প্রভাব পোস্টগ্রেএসকিউএল অফিসিয়াল ডকুমেন্টেশন দ্বারা পরিচালিত হয়েছিল। এ আরও জানুন PostgreSQL ডকুমেন্টেশন .