Ваша проблема связана с тем, что тип данных Int
в Prisma соответствует 32-битному целому числу, которое имеет диапазон от -2,147,483,648 до 2,147,483,647. Если значение osmId
превышает этот диапазон, то возникает ошибка, так как оно выходит за пределы допустимого диапазона.
Решение: Использование типа BigInt
Для работы с большими числами, которые выходят за пределы диапазона Int
, Prisma поддерживает тип данных BigInt
. Вы можете изменить тип поля osmId
на BigInt
в вашей модели следующим образом:
prisma
model Place {
id Int @id @default(autoincrement())
osmId BigInt // Идентификатор OSM
code Int
fclass String // Тип пункта
rfclass String? // Тип пункта РФ
population Int // Численность жителей
name String // Наименование населенного пункта
region Region? @relation(fields: [regionId], references: [id]) // Индекс региона
regionId Int?
municipalDistrict MunicipalDistrict[]
lat Float?
lon Float?
MAPINFO_ID Int?
}
Шаги для внесения изменений:
- Обновите модель в
schema.prisma
: Измените тип поляosmId
сInt
наBigInt
, как показано выше. - Сгенерируйте миграцию: Выполните команду для создания миграции:javascript
npx prisma migrate dev --name update-osmId-to-bigint
- Обновите Prisma Client: После применения миграции обновите Prisma Client:javascript
npx prisma generate
- Проверьте поддержку базы данных: Убедитесь, что ваша база данных поддерживает тип
BigInt
. Например:- В PostgreSQL это соответствует типу
BIGINT
. - В MySQL также используется
BIGINT
.
- В PostgreSQL это соответствует типу
Использование в коде TypeScript
В TypeScript значения BigInt
представлены специальным типом bigint
. Если вы используете Prisma Client для работы с этим полем, убедитесь, что вы правильно обрабатываете значения BigInt
в вашем коде:
typescript
const place = await prisma.place.findUnique({
where: { id: 1 },
});
console.log(place.osmId.toString()); // Преобразование BigInt в строку для корректного отображения
Заключение
Изменение типа данных на BigInt
позволит вам работать с большими значениями, такими как идентификаторы OSM, которые выходят за пределы диапазона Int
. Убедитесь, что все изменения корректно применены в базе данных и в вашем коде.