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

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

15.05.2024 23:14


20.03.2023 14:53
polin11
 
Использую PGSQL. Есть таблица
SQL код:
CREATE TABLE forms (
    
id serial PRIMARY KEY,
    
account INT NOT NULL,
    
author text,
    
type INT NOT NULL
);
INSERT INTO  forms(accountauthorsalaryVALUES 
(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, время: 23:14.

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