SELECTপ্রক্রিয়া চলাকালীন কোনও আগত বিবৃতি প্রভাবিত না করে আমি কোনও টেবিলের পুরো বিষয়বস্তু প্রতিস্থাপন করতে চাই ।
ব্যবহারের ক্ষেত্রে এমন একটি টেবিল থাকা উচিত যা মেলবক্সের তথ্য নিয়মিত উত্তোলিত হয় এবং একটি পোস্টগ্র্যাসকিউএল টেবিলের মধ্যে সংরক্ষণ করা দরকার। এমন একটি অ্যাপ্লিকেশন ব্যবহার করে এমন অনেক ক্লায়েন্ট রয়েছে যা নিয়মিতভাবে একই টেবিলটি জিজ্ঞাসা করছে।
সাধারণত, আমি এমন কিছু করতাম (সিউডোকোড ইনকামিং) ...
BEGIN TRANSACTION
TRUNCATE TABLE
INSERT INTO
COMMIT
কিন্তু দুর্ভাগ্যক্রমে এই প্রক্রিয়া চলাকালীন টেবিলটি পড়া যায় না; সময়টি INSERT INTOসম্পূর্ণ হওয়ার জন্য লাগে । টেবিলটি তালাবন্ধ।
মাইএসকিউএলে, আমি RENAME TABLEএই সমস্যাগুলি এড়াতে তাদের পারমাণবিক আদেশ ব্যবহার করতাম ...
CREATE TABLE table_new LIKE table;
INSERT INTO table_new;
RENAME TABLE table TO table_old, table_new TO table; *atomic operation*
DROP TABLE table_old;
পোস্টগ্র্রেএসকিউএল এ আমি কীভাবে এটি অর্জন করতে পারি?
এই প্রশ্নের প্রয়োজনে, আপনি ধরে নিতে পারেন আমি বিদেশী কী ব্যবহার করছি না।
TRUNCATEকমান্ডটি টেবিলে একটি অ্যাক্সেসএক্সক্লুসিভ লক অর্জন করবে, সুতরাং এই লেনদেনটি সীমাবদ্ধ না করা বা ফিরিয়ে না দেওয়া পর্যন্ত অন্য কেউ টেবিল থেকে পড়তে পারবেন না।
deleteপরিবর্তে ব্যবহার করেন truncateতবে ধীর হবে তবে পাঠকদের অবরুদ্ধ না করে। আপনার কতটি সারি মুছতে হবে?
DELETEএবং INSERTউপায় খুব দীর্ঘ হবে।