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

Триггер на изменение первичного ключа

11.01.2026, 12:37. Показов 359. Ответов 2

Студворк — интернет-сервис помощи студентам
Я не понимаю в каком порядке должен применяться триггер. У меня есть вот такая БД:

Я хочу сделать триггер, чтобы при изменении номера читательского билета в таблице читателей (public.the_reader.ticket_number) менялись все соответствующие номера в таблице книговыдач (public.extradition.reader_s_ticket_numb er).
Я написал вот такой код:
SQL
1
2
3
4
5
6
7
8
9
10
--создали функцию
CREATE OR REPLACE FUNCTION re_registration_fun() RETURNS TRIGGER AS $re_registration_audit$
BEGIN
  UPDATE public.extradition SET reader_s_ticket_number = NEW.ticket_number WHERE reader_s_ticket_number = OLD.ticket_number;
END;
$re_registration_audit$ LANGUAGE plpgsql;
--привязали к триггеру
CREATE OR REPLACE TRIGGER re_registration_trig
  BEFORE UPDATE ON public.the_reader
    FOR EACH ROW EXECUTE FUNCTION re_registration_fun();
Проблема в том, что когда я вызываю, например:
SQL
1
UPDATE public.the_reader SET ticket_number = 412563058694231 WHERE public.the_reader.ticket_number = 125403698254103;
Я получаю ошибку из-за того, что триггер пытается поменять первичный ключ когда на него есть ссылка, а если я поменяю BEFORE на AFTER, я тоже получу ошибку: будет момент, когда внешний ключ изменён, а соответствующего первичного ключа нет.
Как правильно переписать этот триггер?
P. S. Использование триггера прописано в техзадании, если менять ключ через триггер нельзя, я буду менять весь запрос.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2026, 12:37
Ответы с готовыми решениями:

Изменение первичного ключа
В качестве первичного ключа нужно вводить натуральные числа. Как назначать эти числа при: первой...

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

Запрос на создание таблицы. Установка первичного ключа.
Доброго времени суток. Ситуация следующая: у меня есть запрос на создание таблицы. Мне нужно в...

2
5 / 5 / 0
Регистрация: 21.08.2025
Сообщений: 16
11.01.2026, 21:14
Добрый вечер.
Если допустимо изменение номера читательского билета в таблице читателей (public.the_reader.ticket_number), то для связи с другими таблицами это поле использовать не стоит. Создать в the_reader уникальное автоинкрементное поле (например ticket_number_id). Вот его и использовать как первичный ключ для связи с таблицами.
1
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
18.01.2026, 21:45
По-моему это проще делать через CONSTRAINT FOREIGN KEY ... ON UPDATE CASCADE.
Ну лучше сделать суррогатный первичный ключ, как советуют выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2026, 21:45
Помогаю со студенческими работами здесь

Кластерный индекс для первичного ключа?
Кластерный индекс для первичного ключа, нужен ли он?

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

Перенос данных первичного ключа в другую таблицу
Здравствуйте! При импорте таблиц (данных) с Excel cтолкнулся вот с каким вопросом: как сделать...

Не получается сделать название первичного ключа больше 10 символов
доброй ночи создаю таблицы create, но не могу сделать название первичного ключа больше 10 символов....

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru