ডক্স অনুসারে:
আনুষঙ্গিকভাবে বস্তুগত দৃশ্যে সমবর্তী নির্বাচনগুলি লক আউট না করে পদার্থযুক্ত দৃশ্যটি রিফ্রেশ করুন। (...)
... অন্যান্য বিষয়বস্তু ...
এমনকি এই বিকল্পের সাথে একসাথে কেবলমাত্র একটি রিফ্রেশ যেকোন একটি প্রকৃত দর্শনের বিরুদ্ধে চলতে পারে ।
আমার একটি ফাংশন ছিল যা একটি সামগ্রিক দর্শনের জন্য শেষ রিফ্রেশ সময়টি পরীক্ষা করে এবং যদি 60 সেকেন্ডের বেশি সময় পার হয়ে যায় তবে এটি তা রিফ্রেশ করতে পারে।
তবে, যদি আমি একই সাথে দুটি পৃথক প্রক্রিয়া থেকে একটি বস্তুগত দৃষ্টিভঙ্গি রিফ্রেশ করার চেষ্টা করি তবে কী হবে? তারা কি সারিতে থাকবে বা ত্রুটি বাড়াবে?
কোন উপাদান যখন রিফ্রেশ হয় এবং তখন এটি স্পর্শ করা এড়ানো যায় তখন কী সনাক্ত করার কোনও উপায় আছে?
বর্তমানে, আমি রিফ্রেশ করার আগে একটি সেট-টেবিল রেকর্ড পপুলেশন করেছি (সেট refreshing
করতে true
) এবং তারপরে false
প্রক্রিয়াটি শেষ হয়ে গেলে সেট করে ফেলছি।
EXECUTE 'INSERT INTO refresh_status (last_update, refreshing)
VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id;
EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view';
EXECUTE 'UPDATE refresh_status SET refreshing=false WHERE id=$1' USING refresh_id;
তারপরে, যখনই আমি এই পদ্ধতিটি কল করি, আমি সর্বাধিক সাম্প্রতিক last_update
এবং এর refreshing
মান পরীক্ষা করে দেখি । যদি refreshing
এটি সত্য হয়, তবে বস্তুগত দর্শনটি রিফ্রেশ করার চেষ্টা করবেন না।
EXECUTE 'SELECT
extract(epoch FROM now() - (last_update))::integer,
refreshing
FROM refresh_status
ORDER BY last_update DESC
LIMIT 1' INTO update_seconds_ago, refreshing;
IF(updated_seconds_ago > 60 AND refreshing = FALSE) THEN
-- the refresh block above
END IF;
তবে আমি নিশ্চিত নই যে রিফ্রেশিং পতাকাটি সমকালীনভাবে আপডেট হচ্ছে (আমি বলতে চাইছি এটি রিফ্রেশটি আসলে সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে)
এই পদ্ধতিরটি কি যুক্তিযুক্ত বা আমি এখানে কিছু মিস করছি?