SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Сделать 2 поля уникальными, для определённого значения одного из них.
Сделать 2 поля уникальными, для определённого значения одного из них. [сообщение #1874] Mon, 20 March 2023 15:00 Переход к следующему сообщению
polin11 в настоящее время не в онлайне  polin11
Сообщений: 7
Зарегистрирован: January 2023
Junior Member
Использую PGSQL. Есть таблица

CREATE TABLE forms (
    id serial PRIMARY KEY,
    account INT NOT NULL,
    author text,
    type INT NOT NULL
);
INSERT INTO  forms(account, author, type) VALUES 
(1, 'Иванов', 11),
(2, 'Сидоров', 11),
(3, 'Сергеев', 12)
Нужно сделать набор полей (account, type) уникальным только для type = 11.
Например обе записи нельзя было бы вставить, так как type = 11
(1, 'Иванов', 11),
(1, 'Сидоров', 11)
а например, записи можно было обе вставить, так как type != 11.
(1, 'Иванов', 12),
(1, 'Сидоров', 12)

Как это можно сделать в PGSQL?
Re: Сделать 2 поля уникальными, для определённого значения одного из них. [сообщение #1876 является ответом на сообщение #1874] Mon, 20 March 2023 15:51 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 887
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
не бывает "частичной уникальности".
задачу нужно переформулировать иначе.
тут сейчас насоветуют реализовать всё на триггерах, но это хрень, ибо transactionally dependent.
Re: Сделать 2 поля уникальными, для определённого значения одного из них. [сообщение #1900 является ответом на сообщение #1874] Sun, 26 March 2023 14:32 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 407
Зарегистрирован: August 2022
Senior Member
Разгони по разным таблицам наследованием.
Re: Сделать 2 поля уникальными, для определённого значения одного из них. [сообщение #5320 является ответом на сообщение #1900] Thu, 08 August 2024 13:40 Переход к предыдущему сообщению
iLinkses в настоящее время не в онлайне  iLinkses
Сообщений: 5
Зарегистрирован: August 2024
Junior Member
Максимум который можно выжать из таблиц для вашего случая, это
CREATE UNIQUE INDEX unique_account_type_for_type_11 ON forms (account, type) WHERE type = 11;
Предыдущая тема: Plpgsql. В запросе
Следующая тема: Найти подстроку
Переход к форуму:
  


Текущее время: Fri Nov 15 07:44:47 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00697 секунд