উত্তর:
স্ট্যাকওভারফ্লোতে খুব অনুরূপ প্রশ্নের উত্তর আমার এখানে ।
আপনার পোস্টগ্রেকল সংস্করণের উপর নির্ভর করে আপনি একটি বাগের মধ্যে চলে যেতে পারেন যা pg_stat_activity
বাদ পড়া ব্যবহারকারীদের থেকে সক্রিয় সংযোগগুলি বাদ দিতে পারে। এই সংযোগগুলি pgAdminIII এর ভিতরেও দেখানো হয় না।
আপনি যদি স্বয়ংক্রিয় পরীক্ষা করে নিচ্ছেন (যাতে আপনি ব্যবহারকারীও তৈরি করেন) এটি সম্ভবত সম্ভাব্য পরিস্থিতি হতে পারে।
এই ক্ষেত্রে আপনাকে এ জাতীয় প্রশ্নের কাছে ফিরে যেতে হবে:
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_get_activity(NULL::integer)
WHERE datid=(SELECT oid from pg_database where datname = 'your_database');
এর মতো ক্যোয়ারিতে সহায়তা করা উচিত (ধরে নিই যে ডেটাবেসটির নাম 'ডিবি' রাখা হয়েছে):
select pg_terminate_backend(pid) from pg_stat_activity where datname='db';
pid
বলা হত procpid
, তাই যদি আপনি 9.2 এর চেয়েও পুরনো পোস্টগ্রিজের সংস্করণ ব্যবহার করেন তবে আপনি নিম্নলিখিতটি চেষ্টা করতে পারেন:
select pg_terminate_backend(procpid) from pg_stat_activity where datname='db';
তবে আপনাকে অন্য ব্যবহারকারীদের সংযোগ বিচ্ছিন্ন করতে একটি সুপারভাইজার হতে হবে।
এটি কার্যকর REVOKE CONNECT ON DATABASE FROM PUBLIC
বা অনুরূপ কিছুতেও কার্যকর হতে পারে এবং এরপরে GRANT
এটি কার্যকর হতে পারে ।
এটি ক্লায়েন্ট সংযোগগুলি থেকে একটি ডেটাবেস "মুক্ত" করতে ব্যবহৃত হতে পারে, যাতে আপনি উদাহরণস্বরূপ এটির নাম পরিবর্তন করতে পারেন:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='current_db';
ALTER DATABASE current_db RENAME TO old_db;
ALTER DATABASE new_db RENAME TO current_db;
সচেতন হন যে এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনগুলিতে সমস্যাযুক্ত আচরণের কারণ হতে পারে। লেনদেন ব্যবহারের কারণে ডেটা রিয়েলিটি বাধা দেওয়া উচিত নয়।