|
|
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидВ общем, выкрутился через автономную транзакцию: при событии "deleting" считываю в ней значения из master-записи в переменные (ибо она еще видна там, запись эта). Через Жо как-то получилось... :-(Хорошая мысля приходит апосля (С). Есть способ получше: в before delete триггере master-таблицы затолкать в context-переменные значения нужных полей, а затем читать их в триггере detail-таблицы. И разумеется, выбрасывать исключение, если хотя бы одной из таких переменных нет (т.е. триггер master-таблицы "внезапно" вырубили или убрали оттудова присваивания контекстам). В итоге, нет нужды в автономной транзакции. А с учетом того, что в ФБ-3 rdb$get/set_context'ы будут (наверное...) выглядеть для движка не как "сторонние" UDF'ы, то и скорость будет ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 23:22:29 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Хорошая мысля приходит апосля (С). Таблоид> Есть способ получше: в before delete триггере Таблоид> master-таблицы затолкать в context-переменные Во-первых, внимательнее надо быть, внимательнее: 15685419 Во-вторых, прежде чем выкручиваться и ждать запоздалых умных мыслей ты бы задачу-то озвучил - тебе бы подсказали, как правильнее. А-то выдумаешь, как обычно, хрень какую-нибудь и борешься с ней. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 23:37:19 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамвнимательнее: 15685419 я видел это сообщение. Но ведь это пока что только хотелка, и неизвестно, будет ли она вообще реализована.Гаджимурадов Рустамты бы задачу-то озвучилЗадача следующая. Есть таблица заголовков складских документов (doc_list), и подчинённая к ней таблица со строками (doc_data), они связаны по FK + on delete cascade. Таблица doc_list содержит поля dept_id и optype_id - ИДшники "департамента" и вида операции. Последний влияет на то, какие остатки в какую сторону должны меняться. Есть также таблица остатков (агрегат), с детализацией до уровня dept_id. Да, я знаю, что именно эта таблица будет узким местом при сильной конкуренции за одно и то же изделие. Но из-за констрейнтов qty_*** >= 0 применить схему бесконфликтного агрегирования "на вставках", которую тут показывал ДС, - не получится. Есть, правда, одна идейка с контекстными переменными, но она может жить только при работе с базой исключительно SYSDBA или её владельца (т.к. нужно видеть ВСЕ записи mon$context_variables). От воплощения этой идеи пока воздерживаюсь :-) Вариант добавления этих полей в doc_data рассматривать совсем не хочется: денормализация только из-за отсутствия возможности глянуть в родит. таблицу при каскадном удалении - не айс как бэ. Отсюда и вопрос топега возник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:46:46 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидВариант добавления этих полей в doc_data рассматривать совсем не хочется А вариант убить каскад и делать его обычным триггером?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:55:00 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> глянуть в родит. таблицу при каскадном удалении - не айс как бэ. Ну, что тут можно сказать. 1. Типичный пример, когда, пожалуй, ХП лучше триггеров. 2. У тебя нарушается принцип "триггеры не должны зависеть и взаимодействовать друг с другом" - это чревато проблемами. 3. Вариант с контекстной переменной тоже не айс, ИМХО. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:05:41 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТаблоидВариант добавления этих полей в doc_data рассматривать совсем не хочетсяА вариант убить каскад и делать его обычным триггером?..Был такой порыв, признаться... Но почему-то думкал, что раз при удалении "от каскада" родительскяа запись становится не видной, но и при удалении, вызванном триггером родительской таблицы - тоже будет так. Я ошибался: при отсутствии каскада порядок срабатывания триггеров уже вполне понятный, да и родительская запись остается видимой в before & after триггере дочерней таблицы. Вот исллюстрация. DDL : Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:27:49 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам2. У тебя нарушается принцип "триггеры не должны зависеть и взаимодействовать друг с другом" - это чревато проблемами.Согласен. Пришлось затолкать проверку наличия контекстов в дочерний триггер, да и еще в несколько мест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:29:00 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидВот исллюстрация. Т.е. слова ДЕ "все делается системным триггером AFTER DELETE на мастере" до тебя не дошли... Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:55:21 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
И еще ту нарылось. К вопросу о том, зачем каскад сразу убивает родительскую запись, ДО срабатывания дочерних триггеров:Dimitry SibiryakovДля защиты от идиотов, которые бы норовили вставить в детейл новую запис ь, ссылающуюся на удаляемого мастера. Я попробовал при в Ы ключенном каскаде следующее: 1) в before delete-триггере таблицы-детали добавил INSERT-команду, вставляющую запись в эту же деталь со ссылкой на удаляемого сейчас мастера (old.pid). Результат: поломать FK не получилось, Код: plaintext 1. 2. 3. 4. 2) добавил "замедлитель" в before delete триггер мастер-таблицы, в виде select count(*) кросса из около 15 млн записей. Он даёт на моём железе паузу выполнения около 8 сек (вполне достаточную, чтобы переключиться в другое окно и сделать там какую-нибудь гадость): Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. И при этом делал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. И поэтому - вопрос: может, опасения про то, что "идиоты могут вставить запись со ссылкой на удаляемого мастера", - преувеличены ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:57:15 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТаблоидВот исллюстрация. Т.е. слова ДЕ "все делается системным триггером AFTER DELETE на мастере" до тебя не дошли... Ню-ню...Эти слова я увидел уже после того, как извернулся с контекстами. Я не знал про сиё, ну а переделывать сейчас на схему без каскада" нет смысла, КМК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 15:58:39 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Согласен. Пришлось Вот именно это и есть неправильно и мина замедленного действия. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:00:22 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВот именно это и есть неправильно и мина замедленного действия.Тогда остается вариант запроса полей родит. таблицы в автономной транзакции (стартующей в дочернем before-delete триггере), но это лишние затраты ресурсов сервера будут. Либо делать, как ДС сказал - без каскадов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:08:22 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Тогда остается вариант Нет, ещё есть вариант нормальной организации PSQL-блоков, например, ХП, которая вызывается вручную или из триггера родительской таблицы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:15:21 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамнапример, ХП, которая вызывается вручную или из триггера родительской таблицы.Если код, обновляющий таблицу остатков, встречается только в одном месте (в триггере дочерней таблицы), то какая разница, где ему быть, этому коду: в триггере или в ХП ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:19:22 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Большая разница, потому что если он будет в ХП, которая вызывается из триггера родительской таблицы, то никаких извратов с транзакциями, контекстными переменными и удалением каскадов уже не нужно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:40:48 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамникаких извратов с транзакциями, контекстными переменными и удалением каскадов уже не нужно.OK, буду думкать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:45:44 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Да о чём там думкать-то? Всё очевидно. Но настаивать не буду, ты любишь извраты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 16:50:48 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
у мну просьба будет к тебе и ДСу: когда черновик теста этого доделаю, то вышлю его DDL вам в мыло. Нужно будет знать твоё и его мнение, для начала - в привате. Если удастся в дальнейшем довести это всё до ума, то передам его в FB QA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:10:51 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Помочь я всегда готов, тем более если дело стоящее. А тест чего именно - последовательности триггеров? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:16:46 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамПомочь я всегда готов, тем более если дело стоящее. А тест чего именно - последовательности триггеров?Не, хочу большего: имитация OLTP-нагрузки мифического склада + что-то там из OLAP'a для бухов. Схема в голове давно уже сидит. Года 4 взад я делал первую попытку, но мну она сейчас совсем не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:21:45 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
А, ну попробуй. Но я сомневаюсь, что Павел это примет - скорее всего, даже разбираться не станет. Нужны другие тесты, совсем другие. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:23:41 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНужны другие тесты, совсем другие.Про какие именно ты говоришь ? (нагрузочные тоже нужны. Мне об этом русским по белому Ковязин сказал, еще год взад; да и тест на развал индексов тому подтверждение: приличное число "странностей" с его помощью было найдено, когда на базу наваливалось несколько сотен аттачей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:31:52 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Про какие именно ты говоришь ? Более маленькие и простые, в т.ч. регрессионные. Нагрузочные тоже нужны, конечно, кто ж спорит. Никто не скажет "не нужно" бесплатному тесту, тем более Ковязин. В т.ч. тест бэкапа, импорта, создания индексов, в т.ч. сравнительные тесты. В общем, это надо у Павла и Ко спрашивать - что у них уже есть и что требуется в первую очередь. Есть TPC тесты, в конце концов - не в чистом виде, конечно, но идеи взять можно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 17:59:28 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТаблоид> Про какие именно ты говоришь ? Более маленькие и простые, в т.ч. регрессионные.Их есть у меня, но в разрозненном виде. И там надо создавать базу с соотв. данными и эталонными результатами, дабы затем натравливать скрипты, сравнивать результаты с эталонными и оповещать о проблемах. В общем, это всё пока только в мыслях и фантазиях. Гаджимурадов РустамЕсть TPC тесты, в конце концов - не в чистом виде, конечно, но идеи взять можно.Вариант ТРС для ФБ, который я видел, не содержит фишек от трёшки. И в нём нет идеи бесконфликтного обновления сальдо контрагентов, которая мну покоя не даёт :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 18:32:27 |
|
||
|
Каскадное удаление: почему триггер таблицы-детали НЕ видит мастер-записи ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> И там надо создавать базу с соотв. данными и эталонными результатами Да, но можно делать не болванку БД, а "самонаполняющуюся" БД. > Вариант ТРС для ФБ, который я видел, не содержит фишек от трёшки Фишки трёшки (какие именно?) - это вообще десятый вопрос, ИМХО. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 18:40:34 |
|
||
|
|

start [/forum/topic.php?fid=40&startmsg=38580675&tid=1563818]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
206ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 590ms |

| 0 / 0 |
