Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
Привет. Задача такова: нужно связать каким-то признаком группы записей в разных таблицах. Поясняю: В БД есть ХП, выполняющие какие-то действия с данными. В каждой ХП вызывается функция записи статистики: Код: plaintext 1. Эта функция записывает переданные данные в таблицу статистики: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Что хочу добавить: На изменяемой таблице table_name будет висеть триггер, котрый отслеживает какие именно поля были изменены. Триггер записывает имена этих полей в таблицу surv_stat2, например. Возвращаемся к постановке задачи: Каким бы таким критерием связать группы записей в таблице stat и stat2, чтобы было однозначно ясно, что эти поля изменялись вот этим пользователем. Пока на ум приходит только ID транзакции, но как триггер о нем может узнать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 09:05 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
А CREATE SEQUENCE, nextval(), curval() не подойдёт? nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 09:52 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
Andrew SagulinА CREATE SEQUENCE, nextval(), curval() не подойдёт? nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится. А вызванная параллельная транзакция тоже же изменит nextval, а триггер, допустим, еще не запустился. P.S. идея с классом, которую ты предложил тут http://sql.ru/forum/actualthread.aspx?tid=346644 мне больше нравиться. Попробую ее. Но все равно спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:02 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
DDTПривет. Пока на ум приходит только ID транзакции, но как триггер о нем может узнать? Из значения служебного поля xmin, вероятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:03 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
ilejn DDTПривет. Пока на ум приходит только ID транзакции, но как триггер о нем может узнать? Из значения служебного поля xmin, вероятно. а что это за поле можно ссылку и коммент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:10 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
Прочитал. Все-таки меня терзают смутные сомнения: вызванная параллельно другая транзакция увеличит этот счетчик xmin или будет ждать пока не завершиться предыдущая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:16 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
DDTПрочитал. Все-таки меня терзают смутные сомнения: вызванная параллельно другая транзакция увеличит этот счетчик xmin или будет ждать пока не завершиться предыдущая. Если ты готов поверить, что две транзакции способны одновременно изменять одну и ту же запись, то об xmin нужно беспокоиться в последнюю очередь ;). Они-таки не способны. Сформулируй свои сомнения более детально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:54 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
ilejn Если ты готов поверить, что две транзакции способны одновременно изменять одну и ту же запись, то об xmin нужно беспокоиться в последнюю очередь ;). Они-таки не способны. Сформулируй свои сомнения более детально. Вот смотри. Есть поле xmin, в которое записывается ID последней транзакции. Так? 1. Вызывается первая транзакция - значение xmin+1 2. Допустим, что транзакция еще не дошла до внесения изменений в таблицу, а запустилась вторая транзакия. Таким образом xmin+1 еще раз. 3. Первая транзакция дошла до изменения данных и вызывает трггер, который смотрит в xmin, но там лежит ID второй транзакции. Все верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 11:02 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
DDT Andrew SagulinА CREATE SEQUENCE, nextval(), curval() не подойдёт? nextval вызываем в начале транзакции и используем это значение (вызывая curval()) как виртуальный номер транзакции. А реальный номер транзакции без извратов получить не получится. А вызванная параллельная транзакция тоже же изменит nextval, а триггер, допустим, еще не запустился. И что? Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 11:21 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
pamirИ что? Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение. Правильно ли я понимаю механизм работы? (см. рисунок) Про курвал вопросов нет. Но полученный курвал лежит в процедуре, а не в триггере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 11:45 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
DDT pamirИ что? Запомните же наконец - currval выдает последнее значение для СЕССИИ (или как они зовутся в постгресе? В оракле сессии. Но куррвал работает одинаково и там и тут). И если ты выполнил nextval, то пофиг на остальные параллельные транзакции - currval для тебя всегда будет возвращать твое последнее nextval. Если ты сам его еще раз не дернишь, будешь получать одно и тоже значение. Правильно ли я понимаю механизм работы? (см. рисунок) Про курвал вопросов нет. Но полученный курвал лежит в процедуре, а не в триггере. Согласно документации, курвал не будет меняться в пределах транзакции, поскольку триггер будет выполняться в той же транзакции, что и процедура проблем быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 12:17 |
|
||
|
Нужно связать каким-то признаком группы записей в разных таблицах
|
|||
|---|---|---|---|
|
#18+
KipDblK Согласно документации, курвал не будет меняться в пределах транзакции, поскольку триггер будет выполняться в той же транзакции, что и процедура проблем быть не должно. Понял спасибо. Успокоили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 12:20 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2006057]: |
0ms |
get settings: |
13ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 476ms |

| 0 / 0 |
