I have the following structure with an enum { 'ready', 'set', 'go'}
on name
:
x
|----------------------|---------------------------|------------------------|
| Id | enabled | name |
|----------------------|---------------------------|------------------------|
| 1 | true | 'ready' |
|----------------------|---------------------------|------------------------|
| 2 | false | 'ready' |
|----------------------|---------------------------|------------------------|
| 3 | false | 'ready' |
|----------------------|---------------------------|------------------------|
| 4 | false | 'set' |
|----------------------|---------------------------|------------------------|
| 5 | true | 'set' |
|----------------------|---------------------------|------------------------|
| 6 | true | 'go' |
|----------------------|---------------------------|------------------------|
| 7 | false | 'go' |
|----------------------|---------------------------|------------------------|
How can I put a constraint on it so that there will only ever be 3 true
‘s (one on ready
, one on set
, and one on go
)?
Advertisement
Answer
You can use filtered unique indexes (or as Postgres calls them “partial indexes”):
create unique index unq_t_name
on t(name)
where enabled;