Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужно связать каким-то признаком группы записей в разных таблицах / 12 сообщений из 12, страница 1 из 1
06.10.2006, 09:05
    #34036524
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
Привет.

Задача такова:
нужно связать каким-то признаком группы записей в разных таблицах.

Поясняю:
В БД есть ХП, выполняющие какие-то действия с данными. В каждой ХП вызывается функция записи статистики:
Код: plaintext
1.
PERFORM write_stat(userID, 'table_name', recordID, actionID, 'function_name');		

Эта функция записывает переданные данные в таблицу статистики:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE surv_stat
(
  date date,
  "time" time,
  user_id int4,
  table_name varchar( 30 ),
  record_id int4,
  action_id int4,
  function_name varchar( 50 )
) 

Что хочу добавить:
На изменяемой таблице table_name будет висеть триггер, котрый отслеживает какие именно поля были изменены. Триггер записывает имена этих полей в таблицу surv_stat2, например.

Возвращаемся к постановке задачи:
Каким бы таким критерием связать группы записей в таблице stat и stat2, чтобы было однозначно ясно, что эти поля изменялись вот этим пользователем.

Пока на ум приходит только ID транзакции, но как триггер о нем может узнать?
...
Рейтинг: 0 / 0
06.10.2006, 09:52
    #34036631
Andrew Sagulin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
А CREATE SEQUENCE, nextval(), curval() не подойдёт?

nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится.
...
Рейтинг: 0 / 0
06.10.2006, 10:02
    #34036660
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
Andrew SagulinА CREATE SEQUENCE, nextval(), curval() не подойдёт?

nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится.

А вызванная параллельная транзакция тоже же изменит nextval, а триггер, допустим, еще не запустился.

P.S.
идея с классом, которую ты предложил тут http://sql.ru/forum/actualthread.aspx?tid=346644

мне больше нравиться. Попробую ее.


Но все равно спасибо.
...
Рейтинг: 0 / 0
06.10.2006, 10:03
    #34036665
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
DDTПривет.
Пока на ум приходит только ID транзакции, но как триггер о нем может узнать?

Из значения служебного поля xmin, вероятно.
...
Рейтинг: 0 / 0
06.10.2006, 10:10
    #34036688
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
ilejn DDTПривет.
Пока на ум приходит только ID транзакции, но как триггер о нем может узнать?

Из значения служебного поля xmin, вероятно.

а что это за поле можно ссылку и коммент?
...
Рейтинг: 0 / 0
06.10.2006, 10:16
    #34036713
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
Прочитал.


Все-таки меня терзают смутные сомнения:
вызванная параллельно другая транзакция увеличит этот счетчик xmin или будет ждать пока не завершиться предыдущая.
...
Рейтинг: 0 / 0
06.10.2006, 10:54
    #34036831
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
DDTПрочитал.
Все-таки меня терзают смутные сомнения:
вызванная параллельно другая транзакция увеличит этот счетчик xmin или будет ждать пока не завершиться предыдущая.

Если ты готов поверить, что две транзакции способны одновременно изменять одну и ту же запись, то об xmin нужно беспокоиться в последнюю очередь ;).
Они-таки не способны.

Сформулируй свои сомнения более детально.
...
Рейтинг: 0 / 0
06.10.2006, 11:02
    #34036872
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
ilejn
Если ты готов поверить, что две транзакции способны одновременно изменять одну и ту же запись, то об xmin нужно беспокоиться в последнюю очередь ;).
Они-таки не способны.

Сформулируй свои сомнения более детально.

Вот смотри. Есть поле xmin, в которое записывается ID последней транзакции. Так?


1. Вызывается первая транзакция - значение xmin+1
2. Допустим, что транзакция еще не дошла до внесения изменений в таблицу, а запустилась вторая транзакия. Таким образом xmin+1 еще раз.
3. Первая транзакция дошла до изменения данных и вызывает трггер, который смотрит в xmin, но там лежит ID второй транзакции.

Все верно?
...
Рейтинг: 0 / 0
06.10.2006, 11:21
    #34036950
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
DDT Andrew SagulinА CREATE SEQUENCE, nextval(), curval() не подойдёт?

nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится.

А вызванная параллельная транзакция тоже же изменит nextval, а триггер, допустим, еще не запустился.

И что?
Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение.
...
Рейтинг: 0 / 0
06.10.2006, 11:45
    #34037054
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
pamirИ что?
Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение.

Правильно ли я понимаю механизм работы? (см. рисунок)

Про курвал вопросов нет. Но полученный курвал лежит в процедуре, а не в триггере.
...
Рейтинг: 0 / 0
06.10.2006, 12:17
    #34037183
KipDblK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
DDT pamirИ что?
Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение.

Правильно ли я понимаю механизм работы? (см. рисунок)

Про курвал вопросов нет. Но полученный курвал лежит в процедуре, а не в триггере.

Согласно документации, курвал не будет меняться в пределах транзакции, поскольку триггер будет выполняться в той же транзакции, что и процедура проблем быть не должно.
...
Рейтинг: 0 / 0
06.10.2006, 12:20
    #34037196
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно связать каким-то признаком группы записей в разных таблицах
KipDblK
Согласно документации, курвал не будет меняться в пределах транзакции, поскольку триггер будет выполняться в той же транзакции, что и процедура проблем быть не должно.

Понял спасибо. Успокоили :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужно связать каким-то признаком группы записей в разных таблицах / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]