Проблема с типом данных BigInt в Prisma

Ваша проблема связана с тем, что тип данных 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?
}

Шаги для внесения изменений:

  1. Обновите модель в schema.prisma: Измените тип поля osmId с Int на BigInt, как показано выше.
  2. Сгенерируйте миграцию: Выполните команду для создания миграции:javascriptnpx prisma migrate dev --name update-osmId-to-bigint
  3. Обновите Prisma Client: После применения миграции обновите Prisma Client:javascriptnpx prisma generate
  4. Проверьте поддержку базы данных: Убедитесь, что ваша база данных поддерживает тип BigInt. Например:
    • В PostgreSQL это соответствует типу BIGINT.
    • В MySQL также используется BIGINT.

Использование в коде 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. Убедитесь, что все изменения корректно применены в базе данных и в вашем коде.