patternsqlMinor
Is there Such Thing As The Opposite of Unique Constraint
Viewed 0 times
suchuniquetheconstraintthereoppositething
Problem
I want to be constrain my database with what is essentially the opposite of a
Note: I am working within postgres.
Take the following datasets for example. I want a "
I should not have been able to add the row
This may be a separate question, but I would also like to add the constraint that all rows with the same value in one column (i.e.
So I want this to be impossible
But this is ok
I have looked around pretty heavily and the opposite of this is possible
with unique constraints, but I can't find anything that works for this.
Check constraints will only look at the row in question, and won't take into account the entire table's entries like a unique constraint would.
Is this even possible? Or is this now out of the realms of Postgres functionality, and must be done in-application.
UNIQUE constraint. I want to only be able to add a new row if some combination of fields has been added before. Note: I am working within postgres.
Take the following datasets for example. I want a "
NON UNIQUE" constraint on the following:1, a, 1
1, a, 1
1, b, 1I should not have been able to add the row
(1, b, 1) since it has not appeared before. There are also other fields I don't want to constrain so it's not like all the entries are identical.This may be a separate question, but I would also like to add the constraint that all rows with the same value in one column (i.e.
a in the above example) have the same value in another. So I want this to be impossible
1, a, 1
1, a, 1
0, a, 1But this is ok
1, a, 1
1, a, 1
0, b, 1I have looked around pretty heavily and the opposite of this is possible
with unique constraints, but I can't find anything that works for this.
Check constraints will only look at the row in question, and won't take into account the entire table's entries like a unique constraint would.
Is this even possible? Or is this now out of the realms of Postgres functionality, and must be done in-application.
Solution
Your second goal can be achieved with an EXCLUDE constraint.
create extension btree_gist ;
alter table t add constraint adsfj exclude using gist (col2 with =, col1 with <>);Code Snippets
create extension btree_gist ;
alter table t add constraint adsfj exclude using gist (col2 with =, col1 with <>);Context
StackExchange Database Administrators Q#231296, answer score: 2
Revisions (0)
No revisions yet.