1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00

Add Use Not Valid To Immediately Enforce A Constraint as a postgres til

This commit is contained in:
jbranchaud
2016-04-28 20:49:55 -05:00
parent 94a2b7bf70
commit f2d08564e5
2 changed files with 32 additions and 1 deletions

View File

@@ -7,7 +7,7 @@ variety of languages and technologies. These are things that don't really
warrant a full blog post. These are mostly things I learn by pairing with
smart people at [Hashrocket](http://hashrocket.com/).
_404 TILs and counting..._
_405 TILs and counting..._
---
@@ -243,6 +243,7 @@ _404 TILs and counting..._
- [Types By Category](postgres/types-by-category.md)
- [Use A psqlrc File For Common Settings](postgres/use-a-psqlrc-file-for-common-settings.md)
- [Use Argument Indexes](postgres/use-argument-indexes.md)
- [Use Not Valid To Immediately Enforce A Constraint](postgres/use-not-valid-to-immediately-enforce-a-constraint.md)
- [Using Expressions In Indexes](postgres/using-expressions-in-indexes.md)
- [Using Intervals To Offset Time](postgres/using-intervals-to-offset-time.md)
- [Who Is The Current User](postgres/who-is-the-current-user.md)

View File

@@ -0,0 +1,30 @@
# Use Not Valid To Immediately Enforce A Constraint
When adding a constraint to a table, you can optionally include `not valid`.
This tells Postgres that it doesn't need to enforce the constraint on
existing records in the table. At least not immediately. This constraint
will be enforced for any updates and subsequent insertions. Thus, you can
immediately enforce the constraint while giving yourself time to clean up
or massage any existing records that conflict with the constraint.
Here is an example of how you would add a constraint this way:
```sql
alter table boxes
add constraint check_valid_length
check (length > 0) not valid;
```
Eventually, you will want to ensure that all data in the table conforms to the
constraint. Once you get to that point, you can mark the constraint as valid
with a `validate constraint` command:
```sql
alter table boxes
validate constraint check_valid_length;
```
As long as all records are valid with respect to this constraint, it will be
marked as valid.
h/t Chris Erin