Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > PostgreSQL

Сделать 2 поля уникальными, для определённого значения одного из них. : PostgreSQL

29.01.2025 6:07


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

Как это можно сделать в PGSQL?
20.03.2023 14:54
Вы можете создать уникальный индекс на полях acco и sY, таким образом, для каждого значения acco не может быть несколько записей с одинаковым значением sY:

CREATE UNIQUE INDEX idx_unique_acco_sY
ON Cms (acco, sY);

Этот индекс не позволит вставлять записи, для которых уже существует запись с тем же значением acco и sY.

Однако, если вы хотите разрешить несколько записей с одинаковым значением sY, только если acco имеет определенное значение, вы можете использовать условие WHERE в индексе:

CREATE UNIQUE INDEX idx_unique_acco_sY_11
ON Cms (sY)
WHERE acco = 11;

Этот индекс разрешает несколько записей с одинаковым значением sY, только для тех записей, у которых acco равно 11. Для других значений acco, индекс будет работать как обычно.
Часовой пояс GMT +3, время: 06:07.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.