সার্ভারটি বন্ধ না করে কীভাবে একটি নির্দিষ্ট ডাটাবেসে সমস্ত সংযোগগুলি ড্রপ করবেন?


45

আমি বর্তমানে সুনির্দিষ্ট পোস্টগ্রিএসকিউএল ডাটাবেসে খোলা সমস্ত সংযোগ (সেশন) ফেলে দিতে চাই তবে সার্ভারটি পুনরায় আরম্ভ না করে বা অন্যান্য ডাটাবেসের সাথে সংযোগ বিচ্ছিন্ন না করেই।

আমি এটা কিভাবে করবো?


আমি কোথাও পড়েছি যে আপনি এটি অর্জন করতে নিম্নগতিতে / কুটারটি ব্যবহার করতে পারেন ।

উত্তর:


22

স্ট্যাকওভারফ্লোতে খুব অনুরূপ প্রশ্নের উত্তর আমার এখানে ।

আপনার পোস্টগ্রেকল সংস্করণের উপর নির্ভর করে আপনি একটি বাগের মধ্যে চলে যেতে পারেন যা 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');

8
ত্রুটি: "pg_stat_activity" টেবিলের জন্য FROM- ধারা প্রবেশ অনুপস্থিত (psql (9.6.1))
ব্যবহারকারী 1767316

4
এটি আর কাজ করে না .... উপরের ত্রুটিটি পান ^
লাইটওয়েট


ক্লজ থেকে অনুপস্থিত, কাজ করে না
বিপুল

78

এর মতো ক্যোয়ারিতে সহায়তা করা উচিত (ধরে নিই যে ডেটাবেসটির নাম 'ডিবি' রাখা হয়েছে):

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এটি কার্যকর হতে পারে ।


3

এটি ক্লায়েন্ট সংযোগগুলি থেকে একটি ডেটাবেস "মুক্ত" করতে ব্যবহৃত হতে পারে, যাতে আপনি উদাহরণস্বরূপ এটির নাম পরিবর্তন করতে পারেন:

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;

সচেতন হন যে এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনগুলিতে সমস্যাযুক্ত আচরণের কারণ হতে পারে। লেনদেন ব্যবহারের কারণে ডেটা রিয়েলিটি বাধা দেওয়া উচিত নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.