#postgresql #sequelize.js #uuid
Вопрос:
Я следовал советам, описывающим, как использовать uuid с Sequelize в базе данных Postgres, и определял модель для создания значения uuid по умолчанию. Он ссылается на эту статью здесь.
Совет требует uuid-ossp
продления. Я проверил, что он установлен и работает, используя SELECT в базе данных, которая вызывает функцию, а также подтвердил, что расширение «создано». Чтобы база данных могла позвонить.
В статье рекомендуется определить модель, как я сделал в этом фрагменте кода:
public_id: {
field: 'public_id',
type: Sequelize.UUID,
allowNull: false,
defaultValue: Sequelize.literal('uuid_generate_v4()'),
},
Когда я запускаю код для создания таблицы (синхронизация базы данных с моделями), я получаю ошибку от Sequelize:
Error: Invalid value Literal { val: 'uuid_generate_v4()' }
Я отладил секвенирование, node_modules
и ошибка sql_string.js
здесь:
if (!val.replace) {
throw new Error(`Invalid value ${logger.inspect(val)}`);
}
потому replace
что не определено вкл val
., что uuid_generate_v4()
в моем случае. Забавный факт: независимо от того, что я помещаю в кавычки, я получаю одну и ту же ошибку.
Я думаю, что сделал все правильно, как описано в статье. Есть ли что-то глупое, что я упускаю?
Обновление с основной причиной найдено Хорошей новостью для любых будущих читателей является то, что приведенный здесь код определения модели является абсолютно правильным. Итак, перейдем к К. Родману Манниксу.
Проблема была совсем не в этом. Мой код гораздо более сложного, чем простой пример, в какой-то момент создает определения модели Sequelize как объекты, а затем передает их define
методу Sequelize. Странная часть заключалась в том, что код, определяющий модель, использует установку Sequelize в одной папке, а затем (из-за ошибки конфигурации), выполнявшая define
последовательность, использовала последовательность, установленную в другой папке.
Глубоко в коде Sequelize он выполнил Javascript instanceof
, который увидел два разных «источника» для объекта и вернул значение false-y. Как только я это понял, простая очистка папок проекта заставила все работать.
Комментарии:
1. Я не могу повторить вашу проблему. Какую версию sequelize вы используете?
2. Я должен был уточнить: 6.6.2. Что вы успешно использовали?
3. 6.7.0. Возможно ли, что вы неправильно передаете его модели?
4. Отличная идея, но нет, я не думаю, что есть ошибка при переходе к модели. Если я удалю это определение одного столбца, Sequelize с радостью синхронизирует таблицу, создавая все остальное.
5. Дополнительная информация: я просто настроил его на разрешение нулей и удалил вызов функции в значении по умолчанию. Опять же, Sequelize создал таблицу просто отлично. Буквально только тогда, когда я использую Sequelize.literal, я получаю ошибку.