Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
Добрый день! В кратце опищу ситуацию, в БД создана view с 4 правилами, на insert, update, delete и select. Правило на select выводит данные из таблицы table, собственно так уж получается что вьюшка создана только для фильтрации, данных из таблицы, каким-то пользователя доступны одни записи в таблице, а другим другие. Правила insert, update, delete попросту перенаправляют запрос из view в таблицу. Все работает просто замечательно, при выполнении запросов по одному из консоли, но при работе программного обеспечения возникает проблемка. Программка открывает транзакцию, выполняет вставку во view-> должно сработать правило insert-> запись в таблицу, потом запращивает ID последней аставленной записи -> закрыть транзкцию, но как бы не так нет ее. Запросы я проверял, по отдельности, не используя транзацию они выполняются! 1.Так собственно в чем же дело??? Что не так или может как-то можно обойти эту ситуацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 14:23 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
распишите вью и RULE сдается вы упираетесь в DEFAULT-ы для ... (справочно: - для вью можно задать другие дефаулты, чем для таблицы). или еще во что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 14:45 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
Да на DEFAULT я уже напоролся и добавил для них проверку COALESCE(new.filed,0) Вы можете уточнить будут ли правила работать совместно с транзакциями... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 15:28 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
Конечно правила прекрасно работают с/в транзакциях!!! но как бы не так нет ее. А что значит "нет ее"? Ошибка какаят-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 16:58 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
поскольку слово DEFAULT работает с недоделками, а именно вот так (или через COALESCE) нельзя Код: plaintext 1. 2. ... DO INSTEAD INSERT INTO t1 (id, capt) VALUES (new.id, new.capt); надо сделать для этого ВЬЮ так ! ALTER TABLE vw_t1 ALTER COLUMN id SET DEFAULT nextval('t1_id_seq'::regclass); если еще не изменили) то для пробы делаем так: Код: plaintext 1. 2. Далее запускаем такую последовательность Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 17:10 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
4321 то для пробы делаем так: Код: plaintext 1. 2. Спасибо за подсказку все заработало, записи добавляются почти так как надо, осталось только вот что: если в правиле в VALUES стоят DEFAULT, то и в таблицу попадают значения по умолчанию, а не new.field_name. Я вместо DEFAULT пославил COALESCE(new.field_name,0) все заработало в таблицу записалось вносимое значение, но вы пишите что так делать нельзя, как тогда выкрутиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 11:50 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
vald2006 4321то для пробы ...: Код: plaintext Я ... пославил COALESCE(new.field_name,0)... но вы пишите что так делать нельзя, как тогда выкрутиться? если дефолтные значения полей у вас - 0 , то можно. (но и в этом случае засада - если поле Null -абельно, то Null вы в него не вставите) если же DEFAULT-ы функциональны (или вам надо оставить возможность вставки Null) - то надо _СОЗДАТЬ_ дефолтные значения (отдельно) на колонки_самого_вью. Еще раз: создайте _отдельно_ собственные DEFAULT на колонки ВЬЮ, возможно( но не обязательно) отличающиеся от дефолтов колонок таблицы. Пример того, как это делается я приводил: Код: plaintext И после этого, если вы во вью вставите не все данные, то свои дефолты вью само передаст вашему руле, а уже ваше руле (безо всяких COALESCE-в. И без упоминания DEFAULT в RULE) вставит переданные ему значения в таблицу. Т.е. полный цикл примерно такой Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 17:42 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
У как оно всё ...... хитро :-) За ответ спасибо, хоть и не я спрашивал, но все равно - однозначно, в мемориз!!! А в документации где нибудь этот момент (alter table на view) освещен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 17:57 |
|
||
|
Транзакции и правило на Insert
|
|||
|---|---|---|---|
|
#18+
JelisА в документации где нибудь этот момент (alter table на view) освещен? дока по ALTER TABLE .... SET/DROP DEFAULT These forms set or remove the default value for a column. The default values only apply to subsequent INSERT commands; they do not cause rows already in the table to change. Defaults may also be created for views, in which case they are inserted into INSERT statements on the view before the view's ON INSERT rule is applied. большего я не нашел. Видимо, раз этот пассаж отностится к доке по ALTER TABLE, то разработчики документации сочли это достаточно однозначным. я же до того, что вместо ALTER VIEW надо писать ALTER TABLE как-то докопался методом тыка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 18:28 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=307&tid=2005866]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 379ms |

| 0 / 0 |
