memo.xight.org

日々のメモ

Drupalモジュール XMLSitemap で Duplicate entry エラーが出る場合の対処法

Summary

XMLSitemap を利用していて、XMLSitemapをリビルドした際に、
Duplicate entry のエラーが発生する。

id, type が PRIMARY KEY になっているのだが、
type のサイズが足りないために発生しているエラーのようだ。

エラーのサンプル

WP: Duplicate entry '206-taxonomy_ter' for key 'PRIMARY' query: INSERT INTO xmlsitemap (id, type, subtype, loc, language, access, status, status_override, lastmod, priority, priority_override, changefreq, changecount) VALUES (206, 'taxonomy_term', '16', 'taxonomy/term/206', '', 1, 1, 0, 0, 0.5, 0, 0, 0) in /path/to/drupal/site/all/modules/xmlsitemap/xmlsitemap.inc on line 137.

解決方法

type のサイズを変更し、
中途半端な値のtypeが入っている可能性があるため、xmlsitemapテーブルを削除。
その後、XMLSitemap をリビルドすれば良い。

mysql> ALTER TABLE xmlsitemap MODIFY type VARCHAR(32);
mysql> DELETE FROM xmlsitemap;

% /path/to/drush --root=/var/www/drupal --uri="http://example.com" xmlsitemap-rebuild

変更前のxmlsitemapテーブルのフィールド

mysql> show fields from xmlsitemap;
+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| id                | int(10) unsigned | NO   | PRI | 0       |       |
| type              | varchar(12)      | NO   | PRI |         |       |
| subtype           | varchar(32)      | YES  |     | NULL    |       |
| loc               | varchar(255)     | NO   | MUL |         |       |
| language          | varchar(12)      | NO   | MUL |         |       |
| access            | tinyint(4)       | NO   | MUL | 1       |       |
| status            | tinyint(4)       | NO   |     | 1       |       |
| status_override   | tinyint(4)       | NO   |     | 0       |       |
| lastmod           | int(10) unsigned | NO   |     | 0       |       |
| priority          | float            | YES  |     | NULL    |       |
| priority_override | tinyint(4)       | NO   |     | 0       |       |
| changefreq        | int(10) unsigned | NO   |     | 0       |       |
| changecount       | int(10) unsigned | NO   |     | 0       |       |
+-------------------+------------------+------+-----+---------+-------+

変更後のxmlsitemapテーブルのフィールド

mysql> show fields from xmlsitemap;
+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| id                | int(10) unsigned | NO   | PRI | 0       |       |
| type              | varchar(32)      | NO   | PRI |         |       |
| subtype           | varchar(32)      | YES  |     | NULL    |       |
| loc               | varchar(255)     | NO   | MUL |         |       |
| language          | varchar(12)      | NO   | MUL |         |       |
| access            | tinyint(4)       | NO   | MUL | 1       |       |
| status            | tinyint(4)       | NO   |     | 1       |       |
| status_override   | tinyint(4)       | NO   |     | 0       |       |
| lastmod           | int(10) unsigned | NO   |     | 0       |       |
| priority          | float            | YES  |     | NULL    |       |
| priority_override | tinyint(4)       | NO   |     | 0       |       |
| changefreq        | int(10) unsigned | NO   |     | 0       |       |
| changecount       | int(10) unsigned | NO   |     | 0       |       |
+-------------------+------------------+------+-----+---------+-------+

Reference

Duplicate entry with taxonomy term : drupal.org
http://drupal.org/node/794924

XML sitemap | drupal.org
http://drupal.org/project/xmlsitemap