PXC Strict Mode - жесткий контроль в MySQL

Есть даг, работающий с очередью тасков - запускает их сообразно своим критериям. Очередь хранится в таблицах внутри БД Airflow. Таблицы не дефолтные, а специально созданные. Потребовалось расширить функционал - добавил ещё одну таблицу и получил неожиданную ошибку на операции INSERT:

MySQLdb.OperationalError: (1105, 'Percona-XtraDB-Cluster prohibits use of DML command on a table (airflow.dag_launcher_threads) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER')

pxc_strict_mode в зависимости от заданного режима определяет как БД будет относиться к предупреждениям и нештатным функциям:

DISABLED - не выполнять строгие проверки и работать в обычном режиме; ошибки или предупреждения при использовании экспериментальной/неподдерживаемой функции не регистрируются

PERMISSIVE - eсли проверка не пройдена, зарегистрируйте warning и продолжайте работу в обычном режиме

ENFORCING - если проверка не пройдена - отклонить операцию и выдать ошибку

MASTER - то же самое, что ENFORCING, за исключением того, что проверка явной блокировки таблицы не выполняется

Узнать, текущий режим на сервере:

mysql> SHOW VARIABLES LIKE "pxc_strict_mode";

Variable_name  |Value    |
---------------+---------+
pxc_strict_mode|ENFORCING|

Режим можно поменять (в ущерб надёжности)

mysql> SET GLOBAL pxc_strict_mode=DISABLED; 

но лучше дать mySQL то, что она ожидает:

mysql> ALTER TABLE dag_launcher_threads ADD PRIMARY KEY (run_id);
Written on September 19, 2024