Биллинговая система Nodeny
28 Марта 2024, 12:12:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: mysql8 vs tmppays  (Прочитано 3993 раз)
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 377


Просмотр профиля
« : 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
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #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 Offline

Сообщений: 377


Просмотр профиля
« Ответ #2 : 02 Июля 2022, 20:19:51 »

Спасибо, попробую. А это можно делать на рабочей системе, или лучше тормознуть ядро и запущенные модули?
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1444



Просмотр профиля
« Ответ #3 : 03 Июля 2022, 08:29:58 »

делай на рабочей, потом все ребутнешь и все
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 377


Просмотр профиля
« Ответ #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 Offline

Сообщений: 377


Просмотр профиля
« Ответ #5 : 06 Июля 2022, 10:29:38 »

Может возможно каким-то образом апдейтить сразу users_services чтоб модуль работал корректно? А то вроде только избавился от дедлоков, вообще не очень хочется откатывать версию mysql.
Записан
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 547


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #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

перевірив себе на тестовому - працює, але кількість виведених рядків не одинакова, тому треба більш детально досліджувати це питання

на прод не рекомендую)

Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 547


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #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
Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 377


Просмотр профиля
« Ответ #8 : 07 Июля 2022, 08:12:34 »

а где-то ядром или какими-то модулями вьювы апдейтатся? а то вдруг там тоже ошибки, но я пока этого не заметил? просто может быть тогда в доке вместо рекомендаций установить mysql8 сделать предупреждение, что его не надо ставить? )
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 377


Просмотр профиля
« Ответ #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
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #10 : 14 Августа 2022, 22:19:39 »

Запушил в next.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!