আমি যতদূর বুঝতে পেরেছি, আমাদের জিজ্ঞাসার তালাবন্ধের জন্য অপেক্ষা করা হচ্ছে তার অর্থ এটি সর্বদা লকের জন্য অপেক্ষা করে ছিল এবং এটি কখনও কোনও পরিবর্তন করে নি।
ডান - যদি আপনি দেখতে পান যে পিজি_স্ট্যাট_একটিভিটি.এলইটার টেবিলে অপেক্ষা করা "সত্য", তবে প্রায় অবশ্যই এর অর্থ হ'ল এটি ধৈর্য সহকারে তার টার্গেট টেবিলে অ্যাক্সেস এক্সক্লুসিভ লকটির জন্য অপেক্ষা করছে, এবং এর আসল কাজ (প্রয়োজনে টেবিলটি পুনরায় লিখন, প্রয়োজনীয় ক্যাটালগ পরিবর্তন করা) , সূচি পুনর্নির্মাণ, ইত্যাদি) এখনও শুরু হয়নি।
সম্পূর্ণরূপে আমাদের টেবিল কোয়েরিটি বাতিল করা কি আমাদের পক্ষে নিরাপদ? অথবা এটি কি সম্ভব যে ক্যোয়ারী ইতিমধ্যে কিছু পরিবর্তন করেছে এবং এটি বাতিল করা আমাদের ডাটাবেসটিকে কোনও ধরণের অর্ধেক জায়গায় রেখে দেবে?
পোস্টগ্রিএসকিউএল-এ কোয়েরিগুলি (বা সমতুল্যভাবে, কোনও লেনদেন ফিরিয়ে আনার) কোনও ডেটাবেস দুর্নীতির ঝুঁকি নেই যা আপনি নির্দিষ্ট অন্যান্য ডাটাবেসে (যেমন এই পৃষ্ঠার নীচে ভয়াবহ সতর্কতা ) দ্বারা জড়িত হতে পারে। এই কারণেই অ-সুপারयूসারগণ সাম্প্রতিক সংস্করণগুলিতে, অন্যান্য ব্যাকেন্ডে চলমান নিজস্ব প্রশ্নগুলি ব্যবহার করতে pg_cancel_backend()
এবং pg_terminate_backend()
হত্যা করতে মুক্ত - তারা ডাটাবেস দুর্নীতি সম্পর্কে উদ্বেগ প্রকাশ না করে ব্যবহার করা নিরাপদ। সর্বোপরি, পোস্টগ্রিএসকিউএলকে যে কোনও প্রক্রিয়া নিহত হওয়ার সাথে মোকাবিলা করার জন্য প্রস্তুত থাকতে হবে যেমন ওওম কিলার, সার্ভার শাটডাউন ইত্যাদির কাছ থেকে সিগ্কিল ইত্যাদি That's ওয়াল লগটি এটাই।
আপনি এটিও দেখতে পেয়েছেন যে পোস্টগ্র্যাস এসকিউএল-তে, বেশিরভাগ ডিডিএল কমান্ডগুলি (মাল্টি-স্টেটমেন্ট) লেনদেনের ভিতরে বাসাতে করা সম্ভব হয়, যেমন
BEGIN;
ALTER TABLE foo ...;
ALTER TABLE bar ...;
-- more stuff
COMMIT; -- or ROLLBACK; if you've changed your mind
(এটি নিশ্চিত করার জন্য দুর্দান্ত যে স্কিমা মাইগ্রেশনগুলি পুরোপুরি একসাথে চলেছে বা মোটেও নয়)) আপনি বলেছেন, যদিও:
আমরা কি না মোড়ানো ALTER TABLE
একটি লেনদেন হবে।
একক কমান্ডের জন্য এটি ঠিক - ডক্স থেকে ,
PostgreSQL আসলে প্রতিটি এসকিউএল স্টেটমেন্টকে লেনদেনের মধ্যে কার্যকর করা হিসাবে গণ্য করে। আপনি যদি কোনও BEGIN কমান্ড না জারি করেন, তবে প্রতিটি স্বতন্ত্র বিবৃতিতে একটি অন্তর্নিহিত BEGIN থাকে এবং (যদি সফল হয়) তবে তার চারপাশে COMPIT জড়িত। বিগিন এবং কমিমিট দ্বারা বেষ্টিত একটি গ্রুপের বক্তব্যকে কখনও কখনও লেনদেন ব্লকও বলা হয়।
সুতরাং যেটি বাতিল করা ALTER TABLE
হয়, pg_cancel_backend()
নিয়ন্ত্রণকারী পিএসকিএল প্রম্পট থেকে জারি করা কোনও সিটিআরএল-সি এর সাথে একই রকম প্রভাব পড়বে যেমন আপনি করেছেন
BEGIN;
ALTER TABLE ... ;
ROLLBACK;
(যদিও আপনি আশাবাদী দেখতে পেয়েছেন যে, এই ব্যয়বহুলটি বাতিল করা ALTER TABLE
যদি আপনি কেবল যে ROLLBACK
কোনও উপায়ে যাচ্ছেন তবে ডাটাবেসটিকে অনেক অপ্রয়োজনীয় গ্রাইন্ডিং থেকে রক্ষা করতে পারে ))