Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
Есть две талицы Doc и child OrgDoc, для них сделан обновляемый VIEW через Rules. Проблема в том, что rules для update and insert отрабатывают правильно, а Rule для удаления только на половину... Т.к. надо удалить из двух таблиц, то там стоит два оператора DELETE и отрабатывает только один из них и запись из подчинённой таблицы удаляется, а из парента не удаляется, не пойму почему... Еще пришлось вставить лишний селект, чтобы наружу вернуть правильный статус для ADO, т.к. иначе ADO кричит что запись не найдена... Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2008, 09:12 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
В общем сделал через вызов функции, криво конечно но работает... А в первом варианте видимо после первого DELETE теряется значение OLD.DOCID, но это наверное баг... и вопрос к разработчикам.... BAG Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 00:06 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
в http://www.postgresql.org/docs/8.3/interactive/rules-update.html написано: авторFirst, their CREATE RULE command allows more: They are allowed to have no action. They can have multiple actions. They can be INSTEAD or ALSO (the default).но я не совсем понял, имеется это ввиду несколько _отдельных_ rule на допустим delete или же несколько выражений через точку с запятой в одном rule... вообще - видимо второе, в примере синтаксиса написано несколько command; command; авторCREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }так что это видимо ошибка, имхо нужно написать багрепорт. SeniorAndre , напишешь ? или мне написать ? -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 11:01 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
Я честно говоря с английским не очень, токо читаю, поэтому нормально написать BugReport не смогу...., но два оператора DELETE не работают точно, я уже попробовал и LEFT JOIN во VIEW и другие танцы..., не работает... пропадает OLD.DocId когда делаешь удаление из одной из таблиц участвующих во VIEW. На данный момент убрал вызов процедуры, как указано в примере и поставил на реляцию каскадное удаление при удалении записи из Parent таблицы... и тоже всё Ок. Хотя Update and Insert отрабатывают правильно, даже если в них прописано несколько команд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 11:25 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
написал: http://archives.postgresql.org/pgsql-bugs/2008-03/msg00247.php кстати два отдельных rule тоже не работают: Код: plaintext 1. 2. 3. 4. 5. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 14:26 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
я кажется понял почему второй rule не срабатывает - ведь в исходной таблице (view) из которой выбирается OLD параметр во время выполнения второго rule нужно строчки уже нет, не с чем джоинить вторую таблицу... так что это может быть не ошибка, а стандартное поведение для rule :) -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 14:46 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
Я же написал..., я делал LEFT JOIN таже пестня.... Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 14:49 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
Код: plaintext -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 15:19 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
гм. несколько не в тему: вообще говоря давно вычисленно, что если надо произвести несколько стейтментов в руле, то наиболее безбаговым будет выполнение этого в одной процедуре. Особо это касается повторного вычисления (т.е. наваривания) счетчиков и прочих дефаултных функций (если что-то по этой части изменилось в 8.3 - было бы хорошо, а то багрепорт был полон ответов, что это "так по дизайну") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 15:27 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
вообщем получается такой вариант: Код: plaintext 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 15:31 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
4321гм. несколько не в тему: вообще говоря давно вычисленно, что если надо произвести несколько стейтментов в руле, то наиболее безбаговым будет выполнение этого в одной процедуре. Особо это касается повторного вычисления (т.е. наваривания) счетчиков и прочих дефаултных функций (если что-то по этой части изменилось в 8.3 - было бы хорошо, а то багрепорт был полон ответов, что это "так по дизайну")полностью согласен :) достаточно вспомнить что rule реализованы не как обычные выражения, а как почти-макросы что бы всячески минимизировать их использование :) но зато только они могут сделать view - изменяемым. В 8.3 по-моему ничего не меняли в этом плане, да в принципе имхо и не нужно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 15:38 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
авторdelete from v where o1_id = 1; --- обязательно проверять по индексу (полю) только из левой таблицы delete from v where o2_id = 2; --- не сработает, так как после первого rule o2_id уже нет в OLD и "where o2_id = 2" перестаёт быть true delete from v where o1_id = 3; Всем огромное спасибо...., ни когда бы недогался что от условия WHERE будет зависеть как он удаляет Действительно самый корректный вариант будет делать через проседуру..., да в общем я так и сделал.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 16:58 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
в завершение темы - Том Лейн ответил что вышеприведённое поведение rules - стандартно и так и должно было быть: http://archives.postgresql.org/pgsql-bugs/2008-03/msg00253.php -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 00:15 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
Тогда им просто нобходимо дополнить хелп..., что "OLD валуе меняется, если вы меняете исходные значения в таблицах из которых получается VIEW" или "ОLD валуе пересчитавается после каждого запроса" ХОтя это глупость..., OLD так олд.... на всё время выполнения Rule. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 08:07 |
|
||
|
Rules for View
|
|||
|---|---|---|---|
|
#18+
SeniorAndreХОтя это глупость..., OLD так олд.... на всё время выполнения Rule.а вот это не соответствует действительности. Руле в пг не "атомарно" - т.е. олд и нью меняются на каждом стейтменте. Даже число записей олдов/ньюев может меняться, не то, что какие-то-там поля. <...................................................> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 10:25 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35212469&tid=2004494]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 387ms |

| 0 / 0 |
