#mysql #sql #rust #rust-diesel
Вопрос:
Это мой файл up.sql:
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(255),
`last_name` VARCHAR(255),
`user_name` VARCHAR(255) NOT NULL UNIQUE,
`email` VARCHAR(255) NOT NULL UNIQUE,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
При запуске миграции дизельного топлива я получаю следующую ошибку:
Дизель поддерживает только таблицы с первичными ключами. Таблица пользователи не имеет первичного ключа
Не знаю, что я делаю не так, любая помощь была бы очень признательна!
Ответ №1:
Я закончил тем, что вручную создал таблицу непосредственно в mysql, однако, когда я попытался сгенерировать схему, я снова получил сообщение об ошибке «нет первичного ключа» от интерфейса командной строки diesel. Поэтому я начал играть со своим sql, чтобы посмотреть, смогу ли я заставить его работать, и в конце концов он сделал это, используя следующее:
CREATE TABLE users (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`first_name` VARCHAR(255),
`last_name` VARCHAR(255),
`user_name` VARCHAR(255) NOT NULL UNIQUE,
`email` VARCHAR(255) NOT NULL UNIQUE,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Похоже, что для того, чтобы diesel распознал столбец как имеющий ПЕРВИЧНЫЙ КЛЮЧ, атрибут первичного ключа должен быть указан последним.
Я не уверен, является ли это ошибкой, известной причудой или допустимым синтаксисом. В любом случае, было довольно неприятно выслеживать это. Я проведу еще несколько тестов и приму этот ответ, если он покажется надежным решением.
(правка: я также проверил это с помощью аналогичного SQL-запроса, где AUTO_INCREMENT пришел после ПЕРВИЧНОГО КЛЮЧА, и это не сработало)
Комментарии:
1. Дизель использует информационную схему, предоставленную mysql, для получения информации о текущей схеме. Это включает в себя имя таблицы, соответствующую информацию о любом столбце и информацию о внешних и первичных ключах. Если cli diesel выдает сообщение об отсутствии первичного ключа для определенной таблицы, это связано с тем, что в информационной схеме нет первичного ключа. Кроме того, это, по-видимому, сильно зависит от платформы. Если вы заинтересованы в том, чтобы помочь решить эту проблему, не стесняйтесь добавлять информацию в соответствующую проблему( github.com/diesel-rs/diesel/issues/2786 )