When defining a foreign key (FK) in pgAdmin (or directly in PostgreSQL), the following options are available:
1. DEFERABLE & DEFERRED
These options control when the foreign key constraint is checked during a transaction.
DEFERRABLE:
- Allows the foreign key check to be deferred until the transaction ends.
- Useful for complex transactions where you might insert/update related rows before enforcing constraints.
- If not specified, the foreign key is NOT DEFERRABLE (checked immediately).
DEFERRED:
- Applies only if the foreign key is DEFERRABLE.
- If set, the constraint is checked at the end of the transaction instead of immediately.
🔹 Example:
- This allows inserting an
order
referencing acustomer_id
that does not yet exist in thecustomers
table as long as it is added later in the same transaction.
2. VALIDATED
When adding a foreign key to an existing table,
VALIDATED
ensures all existing rows comply with the constraint.If NOT VALID, PostgreSQL does not check existing rows but enforces the constraint on future inserts/updates.
🔹 Example:
- This allows adding the FK constraint without immediately verifying all existing records.
3. AUTO FK INDEX
If checked, PostgreSQL automatically creates an index on the foreign key column(s).
This improves lookup performance but increases disk usage.
🔹 Example:
- If
AUTO FK INDEX
is enabled, an index onorders.customer_id
is created automatically.
- If
4. MATCH (FULL / SIMPLE)
Defines how multi-column foreign keys are matched:
MATCH SIMPLE (Default)
- If any column is NULL, the foreign key check is skipped.
MATCH FULL
- Requires all columns in the foreign key to be either NULL or valid.
🔹 Example:
- If
MATCH FULL
, bothproduct_id
andsupplier_id
must be either NULL or valid.
Summary Table
Option | Meaning |
---|---|
DEFERRABLE | Allows foreign key checks to be deferred until the end of a transaction. |
DEFERRED | If DEFERRABLE , the FK check is deferred by default. |
VALIDATED | Ensures all existing data satisfies the FK constraint. |
AUTO FK INDEX | Automatically creates an index on FK columns for performance. |
MATCH SIMPLE | If any FK column is NULL , the check is skipped. |
MATCH FULL | All FK columns must be either NULL or valid. |
Let me know if you need further clarifications! 🚀
Comments
Post a Comment
If you have any doubts, please let me know.