คำถามติดแท็ก check-constraints

2
ปิดใช้งานข้อ จำกัด และการตรวจสอบตารางทั้งหมดขณะที่กู้คืนดัมพ์
ฉันได้รับดัมพ์ของฐานข้อมูล PostgreSQL ของฉันด้วย: pg_dump -U user-name -d db-name -f dumpfile ซึ่งฉันแล้วดำเนินการคืนค่าในฐานข้อมูลอื่นด้วย: psql X -U postgres -d db-name-b -f dumpfile ปัญหาของฉันคือฐานข้อมูลมีข้อ จำกัด การอ้างอิงการตรวจสอบและทริกเกอร์และข้อผิดพลาดบางอย่าง (การตรวจสอบโดยเฉพาะอย่างยิ่งดูเหมือนจะเกิดขึ้น) ในระหว่างการกู้คืนเนื่องจากข้อมูลไม่ถูกโหลดตามลำดับที่จะทำให้การตรวจสอบเหล่านั้นได้รับเกียรติ ยกตัวอย่างเช่นการแทรกแถวในตารางอาจจะเกี่ยวข้องกับการCHECKที่เรียกplpgsqlฟังก์ชั่นที่ตรวจสอบไม่ว่าจะเป็นสภาพที่ถือในตารางที่ไม่เกี่ยวข้องอื่น ๆ หากตารางหลังนั้นไม่โหลดpsqlก่อนก่อนจะเกิดข้อผิดพลาด ต่อไปนี้เป็น SSCCE ที่สร้างฐานข้อมูลดังกล่าวซึ่งเมื่อทิ้งด้วยpg_dumpไม่สามารถกู้คืนได้: CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE …

1
Postgres: SET NOT NULL เป็นอย่างไร "มีประสิทธิภาพมากขึ้น" กว่าข้อ จำกัด การตรวจสอบ
ในเอกสาร PostgreSQL สำหรับข้อ จำกัดกล่าวว่า ข้อ จำกัด แบบไม่เป็นโมฆะเทียบเท่ากับการสร้างข้อ จำกัด การตรวจสอบCHECK (column_name IS NOT NULL)แต่ใน PostgreSQL การสร้างข้อ จำกัด แบบไม่เป็นโมฆะอย่างชัดเจนนั้นมีประสิทธิภาพมากกว่า ฉันสงสัย "มีประสิทธิภาพมากขึ้น" หมายความว่าอย่างไร สิ่งที่เป็นอันตรายของการใช้งานCHECK (column_name IS NOT NULL)แทนSET NOT NULL? ฉันต้องการเพิ่มNOT VALID CHECKข้อ จำกัด และตรวจสอบความถูกต้องแยกต่างหาก (ดังนั้นAccessExclusiveLockจะถูกเก็บไว้ในช่วงเวลาสั้น ๆ เท่านั้นสำหรับการเพิ่มข้อ จำกัด และจากนั้น a ShareUpdateExclusiveLockจะถูกเก็บไว้สำหรับขั้นตอนการตรวจสอบที่ยาวขึ้น): ALTER TABLE table_name ADD CONSTRAINT column_constraint CHECK (column_name IS NOT NULL) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.