Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
подскажите плиз как можно изменить результат при изменении в партициях сейчас при изменении срабатывает тригер на update и там идет операция delete + insert вместо update (что бы данные могли попасть в нужную секцию, удаляем из текущей, и заново вставляем, при вставке работает тригер на insrt, который разруливает в какую секцию инсертить данные) из бд все работает норм, но из hypername получаю ошибку: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; и все стопорится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 18:38 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushka, 1)научится пользоватся гуглом 2)отключить эту проверку в настройках hibernate 3)? 4)profit -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 19:03 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Maxim, отключить в настройках hibernate не дают. для инсерта получилось сделать в postgres с помощью rule для апдейта так же не получилось: в тригерной функции используется with а он с rule не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 19:15 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushka, Можно в BEFORE триггере не возвращать NULL, что приведёт к вставке в мастер-таблицу. На ту же таблицу вешается AFTER триггер, который сразу удаляет запись из мастер-таблицы. Но это всё очень уж неповоротливо становиться... Желательно убрать из мастер-таблицы индексы, установить fillfactor=50 (с потолка взял, надо смотреть по факту) и убедиться, что достаточно autovacuum рабочих. Можно также понизить пороги срабатывания autovacuum'а для мастер-таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 20:10 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
LegushkaMaxim, отключить в настройках hibernate не дают. шампанское по утрам, хибернейт по утрам короче, hibernate -- это дело либо дегенератов (99%), либо аристократов в обоих случаях обходятся без вопросов на форумах, ага Legushka в тригерной функции используется with а он с rule не работает. вот с этого места подробно, с кодом, что делали, что не получилось а то что вы всюду цте пихаете , то тоже не лучший паттерн (сам его пользую часто, грешен) 2егоров -- на апдейт оно не сработает -- там событие в партиции, а его и нет -- делет в одной и инсерт в другой вместо него --> надо вешать вьюху и инстеадить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 20:21 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
qwwq,qwwqнадо вешать вьюху и инстеадить.вот какрас так и пытаюсь сделать, но сейчас уходит в цикл:( Код: sql 1. 2. 3. 4. Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 20:40 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushkaqwwq,qwwqнадо вешать вьюху и инстеадить.вот какрас так и пытаюсь сделать, но сейчас уходит в цикл:( Код: sql 1. 2. 3. 4. Код: sql 1. 2. заведите 2 сущности: 1. мастер -- таблицу (наследование) 2. мастер-- представление (вьюха для обвески инстеадами) наружу публикуйте мастер-- представление , а внутри руля пихайте (инсерттьте) в мастер--табличку, на которой висит старый добрый триггер разброски по партициям. это общий мотив. далее -- никогда не путайте рули с триггерами. -- рули недоступны к пониманию простыми смертными (там мухи и бутсы в головах отцов--основателей). и собственно вместо руле, должен быть инстеад--офф триггер, который проверяет, что партиция меняется, и в этом случае (и только в нем) -- перекрывает обычный апдейт удалением из конкрентой партиции, и вставкой в мастер-- таблицу , на который висит обычный бефоре--триггер партицирования. Т.к. триггер на вьюхе инстеад -- то смело возвращаете NEW. таким образом никаких циклов у вас в принципе нигде не появляется. а иначе -- мухи, и берцы, и ботфорты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 21:01 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
qwwq,авторвместо руле, должен быть инстеад--офф триггер, попробовал создать получил: Tables cannot have INSTEAD OF triggers. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 21:11 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushkaqwwq,авторвместо руле, должен быть инстеад--офф триггер, попробовал создать получил: Tables cannot have INSTEAD OF triggers. не надо пробовать, надо понимать ну или один раз таки убедиться но дальше бестолковку подключить: инстеад триггер вешается на вьюху (вьюха или форейгн тейбл могут иметь тольок инстеад офф триггера) поэтому публичным "интерфейсом" может быть только вьюха в вашем случае. а табличка д.б. спрятана за ней и обвешана обычными триггерами, returning NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 21:25 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
qwwq, сделал как вы сказали, но результат возвращает все равно Affected rows: 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 09:51 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
новое наблюдение причем довольно люопытное: сейчас при обычном апдейте возвращает 1 но если партиция все таки меняется в результате апдейта то Affected rows: 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:37 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk2)отключить эту проверку в настройках hibernate Maxim, подскажите можно ли отключить в hibernate настройку проверки количества измененных строк только в конкретном запросе при сохранении/изменении конкретной записи (только на партицированных таблицах)? устал я от танцов с бубном: не используешь RULE, не возвращает 1 используешь RULE выходит ошибка там где апдейт идет в купе с CTE круг замкнулся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 11:23 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
исправил все хранимки которые были с with теперь остался один шаг до реализации: когда меняется партиция при апдейте возвращает 0 -( дело в том что при создании текущего документа (таблица NOT_MASTER_TABLE), изанчально сохраняется практически пустой запись в master_table после всех расчетов в NOT_MASTER_TABLE идет апдейт в master_table, в том числе присваивается ГОРОД, из за чего партиция с master_table_other переходит в партицию master_table_tambov, но при этом RULE вернул Affected rows: 0 если получится сделать на Affected rows: 1, то исправлять и отключать в hybernate ничего не надо будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 15:12 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushka, "вот с этого места подробно, с кодом, что делали, что не получилось" напишите уже кратенький тест кейс, с минимумом ваших особостей, с табличкой с 3-мя полями (ключ, партицирующее, поле1) чтобы воспроизводилась ваша ситуация) и давайте играться на нём. минимальное кол--во кода в триггерах, только общее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 15:41 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
получилось сделать) теперь правильно возвращает Affected rows: 1 если был апдейт Код: sql 1. логика такая: table_one - это таблица с 1 записью! сделана просто что бы был какой то апдейт в условии стоит функция update_master_table_and_get_row(new, old) в ней реально происходит апдейт, причем сразу участвуют в условиях все поля которые есть в разрезах партиций, поэтому даже если вы апдейтите в условии только по одному ИД, все равно сработают все check и мы сразу в нужную партицию попадаем-) после апдейта проверяем сколько строк апдейтилось и возвращаем результат и потом в исполнении правила идет проверка update_master_table_and_get_row(new, old) = 1 минус подхода: апдейты нельзя будет использовать совместно с with, придется смирится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 16:52 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushkaполучилось сделать) теперь правильно возвращает Affected rows: 1 если был апдейт Код: sql 1. логика такая: table_one - это таблица с 1 записью! сделана просто что бы был какой то апдейт в условии стоит функция update_master_table_and_get_row(new, old) в ней реально происходит апдейт, причем сразу участвуют в условиях все поля которые есть в разрезах партиций, поэтому даже если вы апдейтите в условии только по одному ИД, все равно сработают все check и мы сразу в нужную партицию попадаем-) после апдейта проверяем сколько строк апдейтилось и возвращаем результат и потом в исполнении правила идет проверка update_master_table_and_get_row(new, old) = 1 минус подхода: апдейты нельзя будет использовать совместно с with, придется смирится Безумству храбрых поем мы песню! Делать вам нечего. И ради чего главное то??? -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 17:42 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Maxim, ради того что бы не делать поддержку всех зависимых таблиц которые ссылаются на мастер_таблицу на разных серверах может быть сколь угодно много внешних FK (а это ограничение для создания партиций) отключать FK в нашем случае нерезонно: поддерживать целостность данных там где мы не имеем никакой дейятельности не резонно покупатели сами решают делать им FK или еще чтото на своих таблицах, нам не важно, мы ведем поддержку только своей таблицы правда для того что бы заработало FK это уже другая история, в данном случае важно было сделать так что бы зависимые внешние данные не удалялись тогда когда мы изменяем партиции (из одной удалили, в другую вставили, и в этот момент при делеете не удалились все зависимые данные) вот ради чего все и затевалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 18:00 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
яcreate or REPLACE RULE use_right_updater_master_table AS ON UPDATE TO master_table DO INSTEAD update table_one set b = b where update_master_table_and_get_row(new, old) = 1;думаю можно ли сделать так: заменить апдейт в table_one на select 1 Код: sql 1. что бы не было блоков на одной таблице если одновременно много пользователей совершают апдейты селект так же вернет Affected rows: 1 если внутри в update_master_table_and_get_row() произойдет изменение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 18:08 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
Legushkaполучилось сделать) теперь правильно возвращает Affected rows: 1 если был апдейт Код: sql 1. тьху, блин дай северному варвару нефритовый стержень... так тест кейс с 3-мя полями, БЕЗ РУЛЕЙ но с инстеад--триггерами варвар ниасилил печалька вычёркиваю (тм) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 20:51 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
пысы: задача -- отапдейтить одним стейтментм 2 записи. и получить 2, а не 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 20:53 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
таки надумал сам откейсить : Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 22:14 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
qwwq, спасибо за ваш кейс, попробовал поюзать нашел такой минус: изменение на вью количество измененных дает верно но на основной таблице при изменении : Код: sql 1. Affected rows: 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 12:33 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
ну вы ж блин и дерево: qwwqинстеад триггер вешается на вьюху (вьюха или форейгн тейбл могут иметь тольок инстеад офф триггера) поэтому публичным "интерфейсом" может быть только вьюха в вашем случае. а табличка д.б. спрятана за ней и обвешана обычными триггерами, returning NULL. вы поменяйте десяток ззапись-писей одним апдейттом в своём "решении" и опубликуйте, сколько же роу у вас таки аффектед ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 13:01 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
я ещё дя тупых хотел не t_t обозвать, а t_hidden or t_Stealth or t_phantom, кактотаг проблема с вьюхой вместо таблички -- не видно системных столбцов и приходится апдейт по полям расписывать (и ключи по полям равнять) обобщенных трггерных ф--й (если не через динамику-- что тормозно) не предвидится нужен обьект "враппер", частный случай вьюхи ровно к одной таблице, с системными полями, и спец--кляузой для апдейта текущей строки "фоновой таблички" в таких делах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 13:11 |
|
||
|
секционирование. как при update результат Affected rows: 0 изменить на Affected rows: 1
|
|||
|---|---|---|---|
|
#18+
qwwq, спрятать не получится: она используется уже энцать лет, ее все знают. Эта таблица используется уже во многих кейсах, зашито глубоко в hibernate, вообще одна из первых таблиц с которых все началось. так что не быть ей stealth fantom и тд. rule в общем помогли разрулить это, но сейчас update однострочной таблицы не вариант, нужно придумать альтернативу, как без блоков изменять пустышку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 13:33 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=84&tid=1996952]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 172ms |

| 0 / 0 |
