172 похожих чатов

Такой вопрос. Есть две талблицы: в одной есть id и

колонка deleted и есть другая таблица у которой есть внешний ключь на id первой талицы и колонка name с уникальным индексом

Суть в том, что хотелось чтобы name проверялось на уникальность, только если в таблице 1 deleted = false

Есть варианты, как это реализовать?

3 ответов

19 просмотров

Только триггером. И будет говно.

regression=# create table hehehe ( id bigserial, name varchar, deleted int default 0 ); CREATE TABLE regression=# create unique index hehehe_name_idx on hehehe ( name ) where ( deleted = 0 ); CREATE INDEX regression=# insert into hehehe ( name ) values ( 'name1' ); INSERT 0 1 regression=# insert into hehehe ( name ) values ( 'name2' ); INSERT 0 1 regression=# insert into hehehe ( name ) values ( 'name3' ); INSERT 0 1 regression=# insert into hehehe ( name ) values ( 'name1' ); ERROR: duplicate key value violates unique constraint "hehehe_name_idx" DETAIL: Key (name)=(name1) already exists. regression=# update hehehe set deleted = 1 where name = 'name1'; UPDATE 1 regression=# insert into hehehe ( name ) values ( 'name1' ); INSERT 0 1 regression=# select * from hehehe; id | name | deleted ----+-------+--------- 2 | name2 | 0 3 | name3 | 0 1 | name1 | 1 5 | name1 | 0 (4 rows)

https://postgrespro.ru/docs/postgresql/12/indexes-partial И денормализовать предварительно. Либо выкинуть лишнюю таблицу совсем, либо поле продублировать.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта