I have this table
CREATE TABLE user (
user_id BIGINT NOT NULL,
modified_date DATE NOT NULL,
is_relevant BOOLEAN NOT NULL,
more columns...
);
I have a table of users, and I save history on users. when a data on a user is updated, I insert a new row, with the modified date, with the same user_id, but with is_relevant true. Only the last updated one is with true on is_relevant. So each update a user has, I update the prev row to false, and insert new row with true.
I want to add a constraint for a unique key on user_id and is_relevant, only if is_relevant is true. I want to avoid a situation of two rows with same user id, and true in is_relevant.
Anyone knows how to do it?
Advertisement
Answer
You need a partial unique index, e.g.:
create unique index on "user" (user_id) where is_relevant;
Read about partial indexes in the docs.