Импорт экспорт с помощью SQL

Главные вкладки

Аватар пользователя albert t albert t 4 сентября 2008 в 17:46

С помощью sql импортировал node и node_revision.
В таблице nid установлен autoincrement в последнее значение, например в 78.
Все материалы отображаются корректно, но при попытке добавить материал через drupal ругается что nid=6 уже есть. Где зашито текущее значение nid? Как его изменить?

Комментарии

Аватар пользователя albert t albert t 5 сентября 2008 в 10:14

Капелька ругается на три таблицы node, node_counter, node_revisions. В принципе правильно ругается - он пытается вставить nid=6 в таблицу с последним nid=78. В node nid=auto_increment=79. Вопрос - откуда он берёт текущий nid=6?

оффтоп - перенос ссылочной целостности базы на клиента это моветон, имхо.

Аватар пользователя olk olk 5 сентября 2008 в 11:27

"albert t" wrote:
оффтоп - перенос ссылочной целостности базы на клиента это моветон, имхо.

Это вы еще с пятеркой не работали Smile там вообще таблица {sequences} есть для ключей,
Ну а по вашему случаю, могу предположить, что все таки что то, некоректно импортировали,
(посмотрел node_save, вроде ничего там "криминального" нет), ну и как предположение, сторонний модуль, перехватывающий node_api

Аватар пользователя albert t albert t 6 сентября 2008 в 15:56

Вот залез написать решение а тут уже о нём упоминается.

Именно странная таблица {sequences} - "последовательности" хранит текущее значение для полей auto_incrament в том числе и для node.nid

Поменял на большее всё заработало.

Импортировал из 6-ки в 5-ку поскольку 6-ка сырая и модули ещё сырые, а сайт сдавать пора уже. Утомился вылавливать блох.

В базе много избыточных таблиц, видимо это связано с необходимостью оптимизации скорости запросов на высоконагруженных сайтах.

В любом случае непонятно почему и как функция db_next_id({node}_nid) долазит до {sequences} и почему это нигде не отражено? Есть там конструкция SELECT nextval... И как оно устанавливается? По тригеру на ноде?

Одним слово ссылочная целостность на уровне базы в капельке понятие неоднозначное.

Всем спасибо за участие.