Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для PaladinPaladin
22 / 15 / 9
Регистрация: 07.10.2020
Сообщений: 45

Как запретить повторения первичного ключа? INHERITS

30.09.2021, 19:26. Показов 1839. Ответов 3

Студворк — интернет-сервис помощи студентам
Допустим мне нужно написать триггерную функцию, которая не позволит вставку нового рядка в наследуемую таблицу с тем самым значением первичного ключа, которое уже есть в базовой таблице. То есть допустим есть таблица PC у которой есть первичный ключ PCID, и есть наследуемая таблица с помощью функции INHERITS (допустим PC2), мне нужно что б когда я заполнять таблицу PC2 и вводил PCID, то триггерная функция проверяла нет ли такого же первичного ключа уже в таблице PC.

Вот что у меня примерно вышло, но оно не работает конкретно. При заполнении таблицы PC2 всё равно можно вводить повторяющийся первичный ключ.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE FUNCTION Nelza() RETURNS TRIGGER AS $$ 
DECLARE 
BEGIN
  IF EXISTS ( SELECT * FROM PC t 
    INNER JOIN PC2 i ON i.pc_id=t.pc_id)
THEN
 RAISE NOTICE ‘Айди не может совпадать’;
RETURN NULL;
ELSE
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2021, 19:26
Ответы с готовыми решениями:

Тип сущности требует определения первичного ключа, но ключа в бд нет
Здравствуйте, делаю сайт и столкнулась с рядом трудностей, которых в прошлых раз не было. Во-первых, не работает Scaffold-DbContext,...

Как изменить значение первичного ключа?
Есть такая проблема: В таблице есть столбец - первичный ключ. Естественно, что запрос типа: --- UPDATE pubs.dbo.jobs SET job_id =...

CRUD. Как создать модель без первичного ключа
При создании модели в GII нужен первичный ключ на таблицу. Что если первичный ключ не "повесишь" ни на одно поле. Тогда как...

3
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
01.10.2021, 09:15
Лучший ответ Сообщение было отмечено PaladinPaladin как решение

Решение

для триггера FOR EACH ROW можно было бы так проверить
SQL
1
IF EXISTS ( SELECT 0 FROM PC WHERE i.pc_id=NEW.pc_id) THEN ...
а твоя проверка ищет дубли без учета этой новой записи
1
 Аватар для PaladinPaladin
22 / 15 / 9
Регистрация: 07.10.2020
Сообщений: 45
01.10.2021, 15:15  [ТС]
Спасибо, уже разобрался в принципе сам, намного проще чем я изначально предполагал.

Уже понял что для проверки не нужно сравнивать с наследуемой таблицей, а хватит лишь базовой

SQL
1
 IF NEW.pc_id IN (SELECT pc_id  FROM PC )
0
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
03.10.2021, 03:43
Проанализируйте планы запросов. Вариант Аватар предполагает явное использование индекса, а вот Ваш вариант с IN что-то сомневаюсь. У postgresql не самый совершенный планировщик запросов и тут могут быть подводные камни.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2021, 03:43
Помогаю со студенческими работами здесь

Как связать данные в таблице без первичного ключа?
Добрый день народ, подскажите пожалуйста, необходимо связать данные двух таблиц, но они оба без первичного ключа, на рисунке указано, что...

Как выглядит SQL запрос на получение первичного ключа с таблицы
Подскажите пожалуйста,как выглядит SQL запрос на получение первичного ключа таблицы c SQL Server

Как получить значение из столбца первичного ключа для строки, выделенной в datagridview
Имеем типизированный набор данных DataSet1 с таблицей DataTable1, в которой 3 поля id, name, address (int, string и string соответственно)....

Как в диаграмме классов UML Static Structure задать атрибуту значение первичного ключа?
Подскажите, пожалуйста, как в Visio 2003 в диаграмме классов UML Static Structure задать атрибуту значение первичного ключа?

Пересчет первичного ключа
Намудрил я что-то... В общем в базе данных у меня первичный ключ (как правило, айдишники) задается в ручную(кол-во строк+1), а не...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru