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

Счетчик номера версии

07.06.2025, 14:42. Показов 1061. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать триггер, увеличивающий счетчик (поле version) на единицу при каждом изменении строки. При вставке новой строки счетчик должен устанавливаться в единицу.
SQL
1
CREATE DATABASE plpgsql_triggers;
SQL
1
2
3
4
CREATE TABLE t(
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
  s text, version INTEGER
);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2025, 14:42
Ответы с готовыми решениями:

Счетчик с определённого номера
Нужно создать таблицу с несколькими полями, ну и первое ключевое поле типа счетчик. Вопрос: можно...

Формат номера в поле счетчик
Добрый день! Столкнулся со следующей проблемой. В таблице имеется поле счетчик, которое...

Счетчик записей в день/маска номера договора
День добрый! Подниму ещё одну тему. Вот есть таблица А - входящий звонок строки: номер за...

4
1192 / 761 / 128
Регистрация: 10.03.2012
Сообщений: 4,913
11.06.2025, 10:51  [ТС]
SQL
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE FUNCTION inc_version() RETURNS TRIGGER AS $$ 
BEGIN 
    IF TG_OP = 'INSERT' THEN 
        NEW.version := 1;
    ELSE 
        NEW.version := OLD.version + 1;
    END IF;
    RETURN NEW;
END 
$$ LANGUAGE plpgsql;
SQL
1
2
3
CREATE TRIGGER t_inc_version 
BEFORE INSERT OR UPDATE ON t 
FOR EACH ROW EXECUTE FUNCTION inc_version();
SQL
1
2
3
4
5
6
7
8
INSERT INTO t(s) VALUES ('Раз');
SELECT * FROM t;
INSERT INTO t(s,version) VALUES ('Два',42);
SELECT * FROM t;
UPDATE t SET s = LOWER(s) WHERE id = 1;
SELECT * FROM t;
UPDATE t SET s = LOWER(s), version = 42 WHERE id = 2;
SELECT * FROM t;
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
11.06.2025, 13:46
сделать через sequence ?
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- Создаем последовательность
CREATE SEQUENCE t_version_seq START 1;
 
-- Создаем таблицу
CREATE TABLE t (
    id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    s TEXT,
    version INTEGER DEFAULT NEXTVAL('t_version_seq')
);
 
-- Создаем функцию триггера
CREATE OR REPLACE FUNCTION update_version()
RETURNS TRIGGER AS $$
BEGIN
    IF TG_OP = 'INSERT' THEN
        NEW.version := 1;
    ELSIF TG_OP = 'UPDATE' THEN
        NEW.version := OLD.version + 1;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
 
-- Создаем триггер
CREATE TRIGGER t_update_version
BEFORE INSERT OR UPDATE ON t
FOR EACH ROW EXECUTE FUNCTION update_version();
0
1192 / 761 / 128
Регистрация: 10.03.2012
Сообщений: 4,913
11.06.2025, 16:09  [ТС]
Цитата Сообщение от andrey_f Посмотреть сообщение
сделать через sequence ?
Не правильно это
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,285
11.06.2025, 17:09
Whitecolor, не надо никаких триггеров доя этого. В постгре есть системные типы колонок. Тебе нужна xmin, которая содержит номер транзакции потрогавшей данную запись.

Триггер для такого применять не надо не только потому, что данная задача исходно решена родными средствами, но и потому что просадит производительность.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2025, 17:09
Помогаю со студенческими работами здесь

Автонабор номера. Штатная программа для набора телефонного номера
Добрый вечер! Пожалуйста, помогите разобраться с штатной функцией набора телефонного номера...

Получить номера деталей, поставляемых для лондонских проектов (2 сп-ба). Получить номера деталей, поставляемых для проек
Получить номера деталей, поставляемых для лондонских проектов (2 сп-ба). Получить номера деталей,...

Программно вывести версию системы и версию Access
Рассылаю программу по предприятиям. Возникают по ней вопросы. Спрашиваю: какая у Вас версия...

Где качать Ibexpert? Как определить нужную версию под нужную версию базы? Какие есть альтернативы?
Где качать Ibexpert? Как определить нужную версию под нужную версию базы? Какие есть альтернативы?

Автоматический счетчик номеров в ячейке , например "короткий текст"
Подскажите пожалуйста наиболее простой вариант, как реализовать автоматический счетчик номеров в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru