SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Как создать цепочку обновлений полей строки? (Как создать цепочку обновлений полей строки?)
Как создать цепочку обновлений полей строки? [сообщение #5762] Thu, 21 November 2024 15:47 Переход к следующему сообщению
DaniilGray в настоящее время не в онлайне  DaniilGray
Сообщений: 17
Зарегистрирован: October 2024
Junior Member
Дано: таблица.
В таблицу вставляется строка данных. При этом 6 столбцов таблицы не заполняются.
Через какое-то время строка обнаруживается и обрабатывается внешней программой и один из столбцов (пустойстолбец1) заполняется.
Я триггером BEFORE UPDATE успешно отслеживаю заполнение этого столбца.
Дальше... Дальше в триггерной функции, назначенной этому триггеру, я могу прописать:

NEW.пустойстолбец2:=NOW();
NEW.пустойстолбец3:=функция1(NEW.пус� �ойстолбец1);
NEW.пустойстолбец4:=NOW();
NEW.пустойстолбец5:=функция2(NEW.пус� �ойстолбец3);
NEW.пустойстолбец6:=NOW();

Проблема в том, что в пустых столбцах 2, 4 и 6 я получу одно и то же время. Попробовал использовать переменные - всё равно время одно и то же.

А как мне отслеживать время, потраченное на выполнение той самой внешней программы, функции1 и функции2 по отдельности?

Ведь при создании цепочки триггеров BEFORE UPDATE я на выходе получу те же самые строки, что и сейчас?
Или создавать кучу таблиц, куда будет переезжать поле-идентификатор строк, подлежащий обработке столбец, и при вставке строки будет запускаться соответствующая столбцу функция?
Для трёх столбцов ещё ладно, а если их сто будет?

Или пускай автор программы дописывает свою клятую программу, и запускает обновление всех столбцов по очереди с указанием времени?
Re: Как создать цепочку обновлений полей строки? [сообщение #5768 является ответом на сообщение #5762] Fri, 22 November 2024 12:18 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время в онлайне  BlackEric
Сообщений: 367
Зарегистрирован: June 2022
Senior Member
Время работы внешней программы вы в бд не отследите. Задержки могут быть вызваны чем угодно.
Зачем вам 3 датыв одной записи?
Время работы функций отслеживается тоже не так.
19.9. Статистика времени выполнения
Re: Как создать цепочку обновлений полей строки? [сообщение #5769 является ответом на сообщение #5768] Fri, 22 November 2024 16:53 Переход к предыдущему сообщениюПереход к следующему сообщению
DaniilGray в настоящее время не в онлайне  DaniilGray
Сообщений: 17
Зарегистрирован: October 2024
Junior Member
Внешняя программа отслеживает новые строки в таблице каждые несколько секунд. Поэтому, заполнив поле датывремени* при вставке, а потом - заполнив второе поле датывремени при обновлении первого пустого столбца, разницу вычислить можно. Но тут добавляется время вычисления функций 1 и 2...

* Ага. CREATE DOMAIN datetime AS timestamp without time zone;
Re: Как создать цепочку обновлений полей строки? [сообщение #5770 является ответом на сообщение #5769] Fri, 22 November 2024 17:05 Переход к предыдущему сообщению
BlackEric в настоящее время в онлайне  BlackEric
Сообщений: 367
Зарегистрирован: June 2022
Senior Member
Делайте разными апдейтами ли же у вас все равно все поля в одной записи будут обновлены одновременно одним Update.
Я хз, но постгрес может распараллеливать вызов функций в вашем случае.
Предыдущая тема: Вопрос по триггерам
Следующая тема: The Internals of PostgreSQL
Переход к форуму:
  


Текущее время: Wed Dec 04 22:02:25 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00671 секунд