Я взглянул на текущий mysql.sql из ветви ejabberd 2.1.x для дополнительного контекста на https://github.com/processone/ejabberd/blob/2.1.x/src/odbc/mysql.sql.
CREATE TABLE spool (
username varchar(250) NOT NULL,
xml text NOT NULL,
seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8;
Похоже, столбец "seq" является уникальным идентификатором, который можно использовать так же, как первичный ключ, за исключением того, что на него нельзя ссылаться на внешние ключи.Я ожидаю, что это неважно, потому что в ejabberd никогда не бывает времени, когда вам нужно ссылаться на определенное автономное сообщение по его порядковому номеру в другой таблице mysql посредством ограничения внешнего ключа.
Я уверен, что кто-тоУ processone было мнение об этом, которое привело к уникальному ограничению вместо первичного ключа.Тщательно поработав с mod_offline_odbc, я могу заверить вас, что ejabberd не будет иметь значения, если вы добавите «primary_key (seq)» в определение таблицы спула и удалите избыточное уникальное ограничение для столбца seq.