0
這是一個錯誤(我可以手動爲它創建一個PK),還是這是一個功能?由MySQL上的ejabberd創建的假脫機表沒有PK。這是一個錯誤還是一個功能?
這是一個錯誤(我可以手動爲它創建一個PK),還是這是一個功能?由MySQL上的ejabberd創建的假脫機表沒有PK。這是一個錯誤還是一個功能?
我從ejabberd 2.1.x分支中查看了當前的mysql.sql以獲取更多上下文,其中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;
它看起來像「序列」列是一個唯一的標識符,可以用同樣的方式,只是沒有外鍵引用可以對它進行一個主鍵。我期望這不重要,因爲當你需要通過外鍵約束的方式在另一個mysql表中引用特定的脫機消息時,ejabberd從來沒有過這樣的時間。
我確定processone有人對此產生了一種意見,導致了唯一的約束而不是主鍵。經過與mod_offline_odbc的廣泛合作,我可以向您保證,如果將「primary_key(seq)」添加到假脫機表定義並刪除seq列上的冗餘唯一約束,那麼它對ejabberd沒有任何影響。
我只是試過,我的假脫機停止填充 – blueberryfields
這是非常好奇,我不知道如何解釋它。是否有任何理由你需要一個主鍵而不是唯一的約束? –
我使用拒絕與沒有PK的表一起工作的工具/庫監視表。我猜這是該工具中的一個錯誤。 – blueberryfields