Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 24.03.2013
Сообщений: 177

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

20.03.2023, 13:58. Показов 526. Ответов 1

Студворк — интернет-сервис помощи студентам
Использую PGSQL. Есть таблица

SQL
1
2
3
4
5
6
7
8
9
10
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
2
(1, 'Иванов', 11),
(1, 'Сидоров', 11)
а например, записи можно было обе вставить, так как type != 11.
SQL
1
2
(1, 'Иванов', 12),
(1, 'Сидоров', 12)
Как это можно сделать в PGSQL?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2023, 13:58
Ответы с готовыми решениями:

Сделать поля в модели уникальными через EF
Доброго времени суток. У меня есть модель в EF и через миграцию генерирую соответствующую таблицу. Как силами С# задать полям этой таблицы...

Зависимые поля (список значений одного поля зависит от значения другого поля)
Здравствуйте, Уважаемые участники форума, изучив множество подобных вопросов на разных форумах, не смог найти для себя нужный вариант....

Как связать между собой два поля (список значений одного поля зависит от значения другого поля)
Есть таблица: предмет, КодТипаМатериала (список), КодМатериала (список) для примера: стул, ткань, чёрное сукно ...

1
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,024
20.03.2023, 22:26
Ограничения могут реализовываться через индекс (пример, primary key!)
Соответственно, если надо, чтобы какое-то значение колонки было уникально, можно создать функциональный индекс для этого значения. Пример
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE schema test;
SET search_path = 'test';
 
CREATE TABLE forms
(
    id serial PRIMARY KEY,
    account INTEGER NOT NULL,
    author text,
    "type" INTEGER NOT NULL
);
 
CREATE UNIQUE INDEX forms_unique_type_11_ix ON forms("type")
WHERE "type" = 11;
Тогда можно вставить так

SQL
1
2
3
4
-- OK
INSERT INTO forms (account, author, "type") VALUES
(1, 'Иванов', 11),
(3, 'Сергеев', 12);
Теперь уже нельзя вставить так (есть уже запись с типом 11)
SQL
1
2
3
4
5
-- FAIL
INSERT INTO forms (account, author, "type") VALUES
(1, 'Сидоров', 11);
ОШИБКА:  повторяющееся значение ключа нарушает ограничение уникальности "forms_unique_type_11_ix"
ПОДРОБНОСТИ:  Ключ "(type)=(11)" уже существует.
Но можно продолжать вставлять так
SQL
1
2
3
-- OK
INSERT INTO forms (account, author, "type") VALUES
(1, 'Петров', 12);
В результате всех операций в таблице вот это
Code
1
2
3
4
5
6
7
test=> select * from forms;
 id | account | author  | type 
----+---------+---------+------
  5 |       1 | Иванов  |   11
  6 |       3 | Сергеев |   12
  8 |       1 | Петров  |   12
(3 строки)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2023, 22:26
Помогаю со студенческими работами здесь

Хочу сделать себе программу для запуска одного определенного сайта
Приветствую. Сразу оговорюсь, что к программированию имею отношение на уровне балерины, сильно не пинайте. Может с разделом форума...

Выбрать два значения, для одного поля
Пишу так, один раз выбрать по полю meta_value : SELECT * FROM wp_users,wp_usermeta WHERE `ID`=`user_id` AND `user_login` LIKE '%user%'...

При выборе определённого поля в списке, сделать достурным поле для ввода
Есть список,как при выборе 'Другой город', поле 'Drugoy gorod' сделать доступным...(допустим, что оно не доступно...) <form...

Как сделать так, что при совпадении одного объекта с другим происходило удаление одного из них
Подскажите, как сделать так, что при совпадении одного объекта с другим происходило удаление одного из них. Вкратце. Есть несколько...

ProprertyGrid, изменить значение одного поля в зависимости от значения другого поля
Доброго времени суток! Есть у меня такая проблема. Имеется propertyGrid который я заполняю из созданного мной класса Variables с двумя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru