انتقل إلى المحتوى
أمين أبوزيد
درس مخطط لهMID-020-L03

DDL آمن من ناحية الأقفال

  • الدرس 3 من 6
  • Mid-level
في هذا الدرس 4 موضوعات

هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.

نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.

في هذا الدرس

apply DDL with minimal locking.

الموضوعات المخطط لها

  • Set lock_timeout (for example 3 s) before DDL so it fails fast instead of queueing; retry in a quiet moment.
  • CREATE INDEX CONCURRENTLY avoids blocking writes (cannot run inside a transaction; may leave an invalid index on failure to clean up).
  • Add constraints in two steps: ADD CONSTRAINT ... NOT VALID, then VALIDATE CONSTRAINT (lighter lock).
  • Adding a column with a constant default is fast on modern PostgreSQL (11+); a volatile default (like random()) rewrites the table (verify version before recording).
  • For NOT NULL on a large table: add a check constraint NOT VALID, validate, then set NOT NULL (PostgreSQL 12+ can use the validated check to skip the scan).
تفاصيل المخطط المبدئي

عرض عملي

sql
SET lock_timeout = '3s';
CREATE INDEX CONCURRENTLY idx_orders_customer ON orders (customer_id);
ALTER TABLE orders ADD CONSTRAINT fk_cust FOREIGN KEY (customer_id)
  REFERENCES customer(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT fk_cust;

اختبر فهمك

What does lock_timeout do for a migration?

أظهر الإجابة

Makes it give up instead of waiting in the lock queue.

التطبيق

طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.

المختبر والتمارين الاختبار

تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.

اكتب للبحث في المستويات والمراحل والوحدات والدروس.