ทริกเกอร์ใน Postgres เริ่มทำงานโดยไม่คาดคิด

ฉันมีตารางหลักและตารางย่อยหลายตารางที่มี FK ชี้ไปที่ตารางหลัก ฉันลบบันทึกออกจากตารางหลัก และสังเกตเห็นว่าสิ่งนี้ทำให้เกิดไฟไหม้ทริกเกอร์การลบในตารางลูกทั้งหมด แม้ว่าบันทึกหลักที่ฉันกำลังลบจะไม่มีบันทึกลูกในตารางลูกเหล่านี้ก็ตาม

ฉันพบว่าสิ่งนี้แปลก แต่ฉันมาจาก SQL Server ดังนั้นพฤติกรรมอาจแตกต่างกันใน Postgres

ตัวกระตุ้นของฉันคือตัวกระตุ้นระดับคำสั่งหากจำเป็น

ใครช่วยอธิบายหน่อยได้ไหม ชี้ให้ฉันดูข้อมูลอ้างอิงบ้างไหม

ฉันไม่มีรหัสใด ๆ ที่จะโพสต์ในขณะนี้... แต่ฉันคิดว่าสถานการณ์น่าจะชัดเจนสำหรับผู้ที่มีประสบการณ์มากกว่าใน Postgres


person peter.petrov    schedule 02.12.2018    source แหล่งที่มา


คำตอบ (1)


ทริกเกอร์ระดับคำสั่งจะทำงานโดยไม่คำนึงถึงจำนวนบันทึกที่ได้รับผลกระทบ ดังนั้นแม้ว่าจะไม่มีบันทึกย่อยอยู่ก็ตาม คำสั่งลบอัตโนมัติ (สมมติว่า FK ของคุณคือ on delete cascade) จะถูกดำเนินการ และทริกเกอร์จึงเริ่มทำงาน

person Gregor Raýman    schedule 02.12.2018