จะเกิดอะไรขึ้นหากทั้งสองกระบวนการพยายามที่จะดูข้อมูลอ้างอิงใหม่อย่างต่อเนื่องในเวลาเดียวกัน
ตามเอกสาร: รีเฟรชมุมมองที่เป็นรูปธรรมอย่างไม่หยุดยั้งโดยไม่ล็อคออกพร้อมกันเลือกบนมุมมองที่ปรากฏ ( ... ) ... เนื้อหาอื่น ๆ ... แม้จะมีตัวเลือกนี้REFRESH ครั้งละหนึ่งอาจทำงานกับ มุมมองที่ปรากฏขึ้นใด ๆ ฉันมีฟังก์ชั่นที่ตรวจสอบเวลารีเฟรชครั้งล่าสุดสำหรับ VIEW MATERIALIZED และถ้าผ่านไป 60 วินาทีมันจะรีเฟรช อย่างไรก็ตามจะเกิดอะไรขึ้นหากฉันพยายามรีเฟรชมุมมองที่เป็นรูปธรรมจากกระบวนการที่แยกกันสองกระบวนการในเวลาเดียวกัน พวกเขาจะจัดคิวหรือจะเพิ่มข้อผิดพลาดหรือไม่ มีวิธีการตรวจจับหรือไม่เมื่อมุมมองแบบ MATERIALIZED กำลังถูกรีเฟรชและหลีกเลี่ยงการสัมผัส ขณะนี้ฉันได้ทำการเติมข้อมูลในตารางก่อนที่จะรีเฟรช (ตั้งค่า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 …