Колонка Bigint для postgresql не работает в моем приложении Rails? - PullRequest
0 голосов
/ 24 сентября 2019

Rails 5.2.3 + postgresql 11.5 + gem 'pg', '1.1.4'.Моя первая миграция:

class CreateTmpUsers < ActiveRecord::Migration[5.2]
  def change
    create_table(:tmp_users) do |t|
      t.integer :external_id
      ...
    end
    add_index ...
  end
end

вторая миграция:

class MigrateToRails52 < ActiveRecord::Migration[5.2]
  def up
    change_column :tmp_users, :external_id, :bigint
...
end

schema.db после rails db: migrate:

create_table "tmp_users", force: :cascade do |t|
    t.bigint "external_id"
    ...
end

schema.db после rails db:схема: dump

create_table "tmp_users", force: :cascade do |t|
    t.bigint "external_id"
    ...
end

внутри pgadmin Я вижу: Тип: bigint

TmpUser.inspect дает:

TmpUser(id: integer, external_id: integer, name: strin...

Сохранение через ActiveRecord дает:

TmpUser.create external_id: 392169714724389808

сообщение: 392169714724389808 находится вне диапазона для ActiveModel :: Type :: Integer с лимитом 4 байта. Класс ошибки: ActiveModel :: RangeError

Мне нужно 8 байтов, но получил 4 в проверке

1 Ответ

0 голосов
/ 24 сентября 2019

По какой-то причине таблица создания не любит bigint.Однако вы можете сделать это с помощью add_columm, используя тип данных bigint:

add_column :table_name, :really_big_int, :bigint

Источник: - Миграция Rails: похоже, сбой Bigint в PostgreSQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...