Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« : 28 Июня 2022, 15:05:03 » |
|
приветствую всех. есть такая проблема. в kerner/tmppays.cfg есть значение balance_finishes_service => 1. с mysql 5.5 все отлично работает, но вот с 8-ой версией не хочет. Вот что пишет: The target table v_services of the UPDATE is not updatable
{ 'sql' => 'UPDATE v_services SET tags=CONCAT(tags,\',end_now,\') WHERE price>0 AND uid=?', 'param' => [ 570 ] }; UPDATE v_services SET tags=CONCAT(tags,',end_now,') WHERE price>0 AND uid='570'
Кто знает как можно исправить, чтоб работало?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #1 : 02 Июля 2022, 07:37:46 » |
|
Попробуй пересоздать вьюху с алгоритмом UNDEFINED DROP VIEW IF EXISTS v_services; CREATE ALGORITHM= UNDEFINED VIEW v_services AS SELECT u.*, s.module, s.category, s.title, s.description, s.plain_description, s.grp_list, s.price, s.auto_renew, s.no_renew, s.param FROM users_services u LEFT JOIN services s ON u.service_id = s.service_id;
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #2 : 02 Июля 2022, 20:19:51 » |
|
Спасибо, попробую. А это можно делать на рабочей системе, или лучше тормознуть ядро и запущенные модули?
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1407
|
|
« Ответ #3 : 03 Июля 2022, 08:29:58 » |
|
делай на рабочей, потом все ребутнешь и все
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #4 : 04 Июля 2022, 22:13:04 » |
|
Попробуй пересоздать вьюху с алгоритмом UNDEFINED DROP VIEW IF EXISTS v_services; CREATE ALGORITHM= UNDEFINED VIEW v_services AS SELECT u.*, s.module, s.category, s.title, s.description, s.plain_description, s.grp_list, s.price, s.auto_renew, s.no_renew, s.param FROM users_services u LEFT JOIN services s ON u.service_id = s.service_id; Не помогло, такая же ошибка.
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #5 : 06 Июля 2022, 10:29:38 » |
|
Может возможно каким-то образом апдейтить сразу users_services чтоб модуль работал корректно? А то вроде только избавился от дедлоков, вообще не очень хочется откатывать версию mysql.
|
|
|
Записан
|
|
|
|
Redmen
NoDeny
Ветеран
Карма: 62
Offline
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #6 : 06 Июля 2022, 12:37:34 » |
|
https://dev.mysql.com/doc/refman/8.0/en/view-updatability.htmlІноді багатотабличне подання може бути оновлюваним, якщо припустити, що його можна обробити за допомогою MERGE алгоритму. Щоб це працювало, представлення має використовувати внутрішнє об’єднання (а не зовнішнє об’єднання чи UNION). ... Перегляди, які використовують UNION ALL, заборонені, навіть якщо вони теоретично можуть бути оновлені. для перевірки є запит: SELECT `TABLE_SCHEMA`, `TABLE_NAME`, `IS_UPDATABLE` FROM `views` WHERE `TABLE_NAME` LIKE 'v_services'; LEFT JOIN => INNER JOIN перевірив себе на тестовому - працює, але кількість виведених рядків не одинакова, тому треба більш детально досліджувати це питання на прод не рекомендую)
|
|
|
Записан
|
|
|
|
Redmen
NoDeny
Ветеран
Карма: 62
Offline
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #7 : 06 Июля 2022, 13:29:15 » |
|
Может возможно каким-то образом апдейтить сразу users_services чтоб модуль работал корректно? А то вроде только избавился от дедлоков, вообще не очень хочется откатывать версию mysql.
для tmppays.pm UPDATE users_services u INNER JOIN services s ON (u.service_id = s.service_id) SET u.tags=CONCAT(u.tags,',end_now,') WHERE s.price>0 AND u.uid = ? для balances.pm UPDATE users_services u INNER JOIN services s ON (u.service_id = s.service_id) SET u.tags=CONCAT(u.tags,',end_now,'), u.next_service_id=0 WHERE s.price>0 AND u.uid = ? але це не точно!)ще є схоже в services/action.pm
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #8 : 07 Июля 2022, 08:12:34 » |
|
а где-то ядром или какими-то модулями вьювы апдейтатся? а то вдруг там тоже ошибки, но я пока этого не заметил? просто может быть тогда в доке вместо рекомендаций установить mysql8 сделать предупреждение, что его не надо ставить? )
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #9 : 13 Июля 2022, 15:37:22 » |
|
для tmppays.pm UPDATE users_services u INNER JOIN services s ON (u.service_id = s.service_id) SET u.tags=CONCAT(u.tags,',end_now,') WHERE s.price>0 AND u.uid = ? для balances.pm UPDATE users_services u INNER JOIN services s ON (u.service_id = s.service_id) SET u.tags=CONCAT(u.tags,',end_now,'), u.next_service_id=0 WHERE s.price>0 AND u.uid = ? але це не точно!)ще є схоже в services/action.pm Спасибо большое! так работает. Ну а доку все-таки разработчику предлагаю подправить.
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #10 : 14 Августа 2022, 22:19:39 » |
|
Запушил в next.
|
|
|
Записан
|
|
|
|
|