|
|
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Мне нужно при вставке для секционированной таблицы проверять соответствует ли запись определенным критериям - для этого я создал функцию в которой в качестве входного параметра является record. У меня возникает вопрос - как передать текущую запись в данную функцию в выражении CHECK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 17:44:39 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
или таки использование функций в выражении CHECK для секционированных таблиц - это плохо? Но тогда как разбивать по различным полям, к примеру: - хочется секционировать по номерам документов что бы все документы с номерами, начинающимися с 1 попадали в одну секцию, начинающиеся с 2 - в другую и т.д. ну и куча других примеров найдется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 18:02:57 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
секционированние это что Partitioning (патрицирование) ? если да то check на каждую таблицу + триггер BEFORE INSERT в котором и определяем в какую таблицу писать данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 18:26:55 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
SmeL_md, с триггерами проблем нет - есть вопрос по CHECK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 18:30:01 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spSmeL_md, с триггерами проблем нет - есть вопрос по CHECKвы можете передать туда рекорд как ROW-конструктор (см RTFM) (попросту -- перечислением всех полей записи в скобках. можно даже с полседующим кастом к типу). Код: plsql 1. хотя, вас наверное интересует, как его передать не перечисляя поля [:0] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 18:42:51 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwq, да, вы правильно поняли - надо чтоб запись целиком без перечисления полей, но данный вопрос наверно отходит на другой план - по такому CHECK движок не сможет строить эффективные планы т.к. результат функции заранее не известен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 18:54:38 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spМне нужно при вставке для секционированной таблицы проверять соответствует ли запись определенным критериям - для этого я создал функцию в которой в качестве входного параметра является record. У меня возникает вопрос - как передать текущую запись в данную функцию в выражении CHECK? Код: sql 1. 2. колитесь, что вы там передаёте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 09:58:55 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ЗЫ Код: sql 1. 2. 3. PS если ф-я иммутабл - можете строить индекс. (и для выделения партиции при планировании тоже может сгодиться, если в where будет та же ф-я.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 10:09:36 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwq, спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 11:04:46 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
возникла очередная проблема с секционированием: имеем текстовое поле ContractNo. по нему настроено секционирование и проверка в секциях выглядит так Код: plsql 1. 2. 3. 4. вставил случайные данные в разные секции от 1 до 500 Пытаюсь делать выборку Код: plsql 1. 2. в плане вижу что идет сканирование всех секций вместо 1й, 2й и 3й Почему мой where не использует constraint_exclusion? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 11:14:47 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spвозникла очередная проблема с секционированием: имеем текстовое поле ContractNo. по нему настроено секционирование и проверка в секциях выглядит так Код: plsql 1. 2. 3. 4. вставил случайные данные в разные секции от 1 до 500 Пытаюсь делать выборку Код: plsql 1. 2. в плане вижу что идет сканирование всех секций вместо 1й, 2й и 3й Почему мой where не использует constraint_exclusion? а вы дайте ему эту возможность, тогда и спрашивайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 11:57:08 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwq, по вашему настоянию - дал :) но результат прежний ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 12:20:47 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Код: plsql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 12:33:45 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
sp Код: plsql 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. у вас условие по (((documents.no)::integer > 100) AND ((documents.no)::integer < 300)) а партиционирование по: partition1 - CHECK ( ContractNo::int <= 100 AND ContractNo::int > 0 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 12:53:08 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, в данном случае названия полей не играют роли - в начале я назвал ContractNo но потом переименовал в no - вы же понимаете что ПЖ не дал бы создать CHECK если указать неверное поле ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:01:44 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spMaxim Boguk, в данном случае названия полей не играют роли - в начале я назвал ContractNo но потом переименовал в no - вы же понимаете что ПЖ не дал бы создать CHECK если указать неверное поле ) не знаю, что у вас не играет делаем полный тест-кейс: Код: 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. ЧЯДНТ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:06:43 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwq, спасибо - разобрался - секционирование работает на запросах к таблице, не работает view на секционированной таблице Чтоб не перегружать пост не писал. что выборку делаю из view: Код: plsql 1. 2. 3. 4. 5. 6. 7. как сделать чтоб view учитывало constraint_exclusion - не пойму ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:20:54 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spqwwq, спасибо - разобрался - секционирование работает на запросах к таблице, не работает view на секционированной таблице Чтоб не перегружать пост не писал. что выборку делаю из view: Код: plsql 1. 2. 3. 4. 5. 6. 7. как сделать чтоб view учитывало constraint_exclusion - не пойму а что будет если написать? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. вообще очень странно все это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:49:28 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:52:16 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:55:51 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwqMaxim Boguk, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. у меня что для view что для таблицы план одинаковый Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 14:11:52 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk<> у меня что для view что для таблицы план одинаковый <> "аналогично"(сс) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 14:38:52 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
qwwqMaxim Boguk<> у меня что для view что для таблицы план одинаковый <> "аналогично"(сс) опять автор топика какую то критичную инфу не выдал "Чтоб не перегружать пост" (к этому бы еще понимание что критично а что нет :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:07:04 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, :) вы правы - утаил WITH(security_barrier = true) с ним и не работает...а надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 16:38:36 |
|
||
|
Использование record в CHECK constarint
|
|||
|---|---|---|---|
|
#18+
spMaxim Boguk, :) вы правы - утаил WITH(security_barrier = true) с ним и не работает...а надо и не будет... никакие условия не вносятся под security barrier... такой view скорее всего будет вычислять всегда полный запрос внутри а потом уже накладывать все остальные условия поверх... на то он и barrier ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 16:47:06 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=132&tid=1998846]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
120ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 426ms |

| 0 / 0 |
