প্রকল্প সম্পর্কে
lib/pq হল একটি বিশুদ্ধ Go বাস্তবায়নের PostgreSQL ড্রাইভার, যা Go-এর স্ট্যান্ডার্ড database/sql প্যাকেজের সঙ্গে সমন্বিত হয়। এটি বর্তমানে রক্ষণাবেক্ষিত সব PostgreSQL সংস্করণ সমর্থন করে এবং libpq-এর সাথে সামঞ্জস্যপূর্ণ পরিচিত একটি DSN ফরম্যাট প্রদান করে; এতে key=value এবং postgres:// URL-স্টাইল—উভয় ধরনের কানেকশন স্ট্রিং গ্রহণ করা হয়।
প্রধান বৈশিষ্ট্যগুলোর মধ্যে রয়েছে:
- **অথেনটিকেশন**: এতে স্বাভাবিকভাবেই PASSWORD, MD5 এবং SCRAM-SHA256 সমর্থিত। অপ্রয়োজনীয় ডিপেন্ডেন্সি এড়াতে একটি পৃথক auth/kerberos মডিউলের মাধ্যমে ঐচ্ছিক GSS/Kerberos অথেনটিকেশন পাওয়া যায়। pgpass ফাইল সমর্থনও অন্তর্ভুক্ত।
- **বাল্ক ইমপোর্ট**: লেনদেনের মধ্যে দক্ষতার সঙ্গে বড় আকারের ডেটা লোড করার জন্য COPY [..] FROM STDIN সমর্থিত।
- **LISTEN/NOTIFY**: pq.Listener টাইপটি একটি Go চ্যানেলের মাধ্যমে PostgreSQL নোটিফিকেশন পৌঁছে দেয়, যার ফলে রিয়েল-টাইম ইভেন্ট-চালিত প্যাটার্ন সম্ভব হয়।
- **ত্রুটি হ্যান্ডলিং**: PostgreSQL ত্রুটিগুলো কাঠামোগত ফিল্ডসহ pq.Error হিসেবে ফেরত আসে। pq.As হেল্পার ত্রুটিগুলোকে টাইপড pq.Error মান রূপান্তরিত করে এবং ErrorWithDetail() ডিবাগিংয়ের জন্য DETAIL ও CONTEXT তথ্য অন্তর্ভুক্ত করে।
- **NOTICE হ্যান্ডলিং**: PostgreSQL থেকে আসা তথ্যমূলক NOTICE বার্তাগুলো একটি কনফিগারযোগ্য কলব্যাক হ্যান্ডলারের মাধ্যমে ধরা যায়।
- **রানটাইম প্যারামিটার**: libpq থেকে ভিন্নভাবে, pq কানেকশন স্ট্রিংয়ে সরাসরি search_path বা work_mem-এর মতো রানটাইম প্যারামিটার সেট করার সুযোগ দেয়।
- **Config struct**: pq.Config struct প্রোগ্রাম্যাটিক কানেকশন কনফিগারেশন প্রদান করে; এতে pq.NewConfig DSN স্ট্রিং পার্স করে এবং pq.NewConnectorConfig একটি কানেক্টর তৈরি করে।
README-তে উল্লিখিত সীমাবদ্ধতাগুলোর মধ্যে রয়েছে: LastInsertId সমর্থিত নয় (এর পরিবর্তে INSERT ... RETURNING ব্যবহার করতে হবে), টাইমস্ট্যাম্প হ্যান্ডলিংয়ে timestamptz-এর জন্য সার্ভার টাইমজোন এবং টাইমজোনবিহীন টাইমস্ট্যাম্পের জন্য একটি স্থির শূন্য-অফসেট জোন ব্যবহৃত হয়, আর COPY চলাকালীন bytea এনকোডিংয়ের কারণে jsonb কলামে সমস্যা হতে পারে।
প্রকল্পটিতে একটি বিস্তৃত টেস্ট স্যুট রয়েছে, যা Docker Compose-এর মাধ্যমে একাধিক PostgreSQL সংস্করণ, pgbouncer এবং pgpool-এর বিরুদ্ধে চালানো যায়। সমস্যা সমাধানের জন্য প্রোটোকল-স্তরের ডিবাগ আউটপুট সক্ষম করতে PQGO_DEBUG=1 এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা যায়।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.