আমি কীভাবে পোস্টগ্রিজ ডাটাবেস থেকে অন্য সমস্ত ব্যবহারকারীকে আলাদা করব?


13

আমার একটি ডাটাবেসে একচেটিয়া অ্যাক্সেস দরকার। পোস্টগ্রিজ ডাটাবেস থেকে অন্য সমস্ত ব্যবহারকারীদের "বিযুক্ত" করার জন্য কি এসকিউএল কমান্ড ব্যবহার করা সম্ভব? বা হতে পারে অন্য সমস্ত সংযোগ বন্ধ করে এবং তারপরে একচেটিয়া অ্যাক্সেস অর্জন করতে পারে।

এটি ইউনিট পরীক্ষার জন্য, এবং পরীক্ষাগুলি কেবল ম্যানুয়ালি সঞ্চালিত হয়, তাই এতে কোনও বিপদ জড়িত নেই। কেবল পুরানো মৃত সংযোগগুলি প্রভাবিত হবে।

এই ইউনিটটেস্ট ডেটাবেসগুলিতে সংযোগকারী অন্য কোনও ব্যবহারকারী নেই।

পুরানো মৃত সংযোগগুলি বিকাশ থেকে আসে। এটি সমস্ত সময় ঘটে যখন লিখিত বা ব্যর্থ হওয়া একটি পরীক্ষা পরিষ্কার থেকে বের হয় না।


যদি কারও কারও কারও কারও কারও কাছে প্রোডাকশন দৃশ্যে সংযোগ বিচ্ছিন্ন করার পরে কিছু সময়ের জন্য লক আউট রাখা দরকার, স্কট মার্লোয়ের উত্তর নীচে দেখুন: /dba//a/6184/2024


ডিবিএ-তেও এই একই প্রশ্নটি দেখুন: সার্ভারটি বন্ধ না করে কীভাবে একটি নির্দিষ্ট ডাটাবেসে সমস্ত সংযোগ ড্রপ করবেন?

উত্তর:


14

আপনি পোস্টগ্রিস ব্যবহারকারী হিসাবে চলমান এবং চলমান হিসাবে ডাটাবেসটিতে সংযুক্ত করার চেষ্টা করতে পারেন:

SELECT pg_terminate_backend( procpid )
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid( )    -- 1. don't terminate your own session
    AND datname =                     -- 2. don't terminate connections to 
    (SELECT datname                   --    other databases in the cluster
       FROM pg_stat_activity
      WHERE procpid = pg_backend_pid( )
    );

আপডেট একটি আরও ভাল কোয়েরি সাবলেট থেকে মুক্তি পেয়েছে:

SELECT pg_terminate_backend( procpid )
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid( )
    AND datname = current_database( );

2
সংযোগের অনুমতিগুলি প্রত্যাহার করতে ভুলবেন না, অন্যথায় আপনার একচেটিয়া অ্যাক্সেসের আগে ব্যবহারকারীরা নতুন সংযোগ তৈরি করে।
ফ্রাঙ্ক হিকেন্স

@ ফ্র্যাঙ্ক হাইকেন্স - ভাল ক্যাচ আমি "ম্যানুয়াল ইউনিট পরীক্ষা" করতে চেয়েছিলাম তবে স্বতন্ত্র ইউনিট পরীক্ষা করার সাথে পৃথকভাবে সংযুক্ত হওয়ার পরে যদি অন্য কেউ থাকে তবে "থেকে <datname> এ কানেক্ট বাতিল করুন ..." প্রয়োজনীয় হবে would
জিএসএম

PostgreSQL 9.2 এ, procpidনামকরণ করা হয়েছিল pid, সুতরাং এটির জন্য নজর রাখুন।
ক্রেগ রিঞ্জার

প্রশ্নে থাকা ব্যবহারকারীর সাথে একটি রিভোকি করা ছাড়াও, আমাকেও প্রকাশ করতে হয়েছিল ..... সর্বজনীন - কিছু দেখার জন্য!
ডেভিড এন।

9.3-তে মনে হয় যে পিজি_স্ট্যাট_একটিভিটি.প্রোকডকে এখন পিজি_স্ট্যাট_একটিভিটি.পিড বলা হয় । অন্যথায় এ-ওকে কাজ করেছেন।
জেএল পেয়ারেট

4

এখানে সমস্যাটি দ্বিগুণ, প্রথমে আপনাকে সেই ব্যবহারকারীদের সংযোগ বিচ্ছিন্ন করতে হবে এবং দ্বিতীয়টি আপনাকে এটিকে আপনার সার্ভার থেকে দূরে রাখতে হবে। সংযোগের অনুমতিগুলি প্রত্যাহার করার পরিবর্তে আমি সাধারণত কিছু মেশিন এবং / অথবা ব্যবহারকারীদের কাছ থেকে নতুন সংযোগগুলি প্রত্যাখ্যান করার জন্য pg_hba.conf ব্যবহার করি, তবে কেবলমাত্র একটি pg_ctl -m ফাস্ট স্টপ করুন; pg_ctl সমস্ত বর্তমান সংযোগগুলি ফেলে দেওয়া শুরু করুন। স্লোনি ডিডিএল পরিবর্তন করার সাথে এটি বেশ প্রয়োজনীয়তা বা আপনি পুরো জায়গা জুড়ে অচলাবস্থা পেয়ে যাবেন।


6
আমি সর্বদা একটি একক ভূমিকা ব্যবহার করি যা সংযোগের অনুমতি দেয় এবং অন্যান্য সমস্ত ভূমিকার দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়। এই একক ভূমিকার জন্য পুনরায় যোগাযোগ করুন এবং আপনার কাজ শেষ। এটি pg_terminate_backend () দিয়ে একটি ফাংশনে আবদ্ধ করুন এবং যখন আপনার সমস্ত বর্তমান সংযোগ বন্ধ করতে হবে আপনি নিয়ন্ত্রণে থাকবেন।
ফ্রাঙ্ক হিকেনস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.