web-dev-qa-db-ja.com

整合性制約違反のため、ユーザーの作成に失敗しました

理解できない理由により、Drupalインストールでユーザーを作成することができません(これは前回試したときの問題ではありませんでした)。

UIで(/admin/people/createで)試行する場合、またはdrush user-createで試行する場合、どちらの場合でも、次のようなエラーメッセージが表示されます。

WD rules: Unable to modify data "account:field-user-image:alt": Invalid data value given.
↪  Be sure it matches [warning] the required data type and format.
WD rules: Unable to evaluate action data_set.
WD user: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
↪ entry '187810' for key[error] 'PRIMARY': INSERT INTO {users} (uid, name, pass, mail,
↪ created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7);
Array
(
    [:db_insert_placeholder_0] => 187810
    [:db_insert_placeholder_1] => [email protected]
    [:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
    [:db_insert_placeholder_3] => [email protected]
    [:db_insert_placeholder_4] => 1329491489
    [:db_insert_placeholder_5] => 0
    [:db_insert_placeholder_6] => 1
    [:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
 in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
WD php: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
↪ entry '187810' for key[error] 'PRIMARY': INSERT INTO {users} (uid, name, pass, mail,
↪ created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7);
Array
(
    [:db_insert_placeholder_0] => 187810
    [:db_insert_placeholder_1] => [email protected]
    [:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
    [:db_insert_placeholder_3] => [email protected]
    [:db_insert_placeholder_4] => 1329491489
    [:db_insert_placeholder_5] => 0
    [:db_insert_placeholder_6] => 1
    [:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
 in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
↪ '187810' for key 'PRIMARY': INSERT INTO {users} (uid, name,
↪ pass, mail, created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7); Array
(
    [:db_insert_placeholder_0] => 187810
    [:db_insert_placeholder_1] => [email protected]
    [:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
    [:db_insert_placeholder_3] => [email protected]
    [:db_insert_placeholder_4] => 1329491489
    [:db_insert_placeholder_5] => 0
    [:db_insert_placeholder_6] => 1
    [:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
 in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
Drush command terminated abnormally due to an unrecoverable error.

は、読みやすくするために行を折り返したことを示しています)。

これは、重複するusers.uidをデータベースに入力しようとしているためであることがわかりますが、なぜそうなるのかわかりません。 users.uidの値を手動で入力したことがないので、autoincrementで処理を実行できます。

何か足りないものはありますか? Drupal(またはmySQL)が自動インクリメント値をリセットし、有効なUIDで挿入しようとするように何かをリセットする方法はありますか?

あるいは、手動でデータベースをいじるだけですか?驚くほど多くのフィールドをいじる必要があるので、それはやっかいですが、もっと簡単ならそれを行うことができますか?

更新:友人が mysqlcheck を実行することを提案しましたが、大丈夫です。また、テーブルの自動インクリメントをリセットする Clivesuggestion では問題が解決されていないようです。

5
Owen Blacker

reallyが長い間取得した後reallyこれに不満を感じたので、修正しましたSQLの1行で。 (ある日、私は本当にコンピューターが嫌いです。)

データベーステーブルsequencesには、1つの行と1つの列が含まれています。この sequences.valueは、(特に)新しいユーザーアカウントに使用されるautoincrement IDです。

なぜそれが間違っていたのか、どのように間違っていたのかわかりません。だが

mysql> update sequences set value = 200000;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

そして突然、ユーザーアカウントの作成が再び機能します。

ある日、私は本当にコンピューターが嫌いだと言ったことがありますか? ; o)

4
Owen Blacker

同様の問題が発生し、ルールまでたどりました。このエラーの原因となるルールに関するスレッドは、ここにあります: http://drupal.org/node/11698

3
Patrick Kenny

自動増分値はかなり簡単にリセットできます。

ALTER TABLE users AUTO_INCREMENT = 187811

少し奇妙ですが、ユーザーを追加すると、uidはコード行で決定されます。

$account->uid = db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField());

データベースから最大のユーザーIDを取得し、PDOを使用して次に使用可能なIDを取得するため、自動インクリメントフィールドが実際に入力されるかどうかはわかりません。

いずれの方法でも、テーブルに対して変更クエリを実行する価値がありますが、これでうまくいく場合があります。

2
Clive