Я использую Rails 4.1, как мне установить новый тип идентификатора модели как bigint Postgres - PullRequest
1 голос
/ 21 июня 2019

Я не могу использовать bigint в идентификаторе моей модели, как вы это обычно делаете при использовании Rails 5, так как я использую rails 4.1

Я хочу, чтобы у моей модели был автоматически увеличивающийся идентификатор, как обычно, но я хочу, чтобы это был bigint, а не обычное целое число.

Таблица транзакций будет содержать миллионы записей, и перенос идентификаторов позже будет головной болью, требующей простоя.

Сначала я попытался использовать генератор рельсов (как хороший ленивый разработчик)

Что дало мне

class CreateTransactions < ActiveRecord::Migration
  def change
    create_table :transactions do |t|
      t.bigint :id
      #more stuff omitted
    end
  end
end

Который не может мигрировать с

undefined method `bigint' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x00007fe8df5c9b88>

Я уже пытался изменить это на

create_table :transactions, id: false do |t|
  t.bigint :id
end

Это работает. Миграция выполняется, но затем не удается автоматически увеличить идентификатор. Смысл, я не могу сделать Transaction.create

или он кричит на меня из слоя db о null ограничении идентификатора.

Очевидно, вы можете создать таблицу и затем изменить ее с помощью change_column, но это не отразилось на schema.rb, так что меня это беспокоит.

Также очевидно, что ^^ (change_column по id) - необратимая миграция, поэтому я хочу этого избежать.

Я знаю, что должен быть простой / безрассудный, приятный способ сделать эту работу.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

Transaction.create

Дает мне новую транзакцию, в которой идентификатор устанавливается как обычный, но это большой int 8 bits, а не обычный int 4 bits

1 Ответ

1 голос
/ 21 июня 2019

Я только что понял это, прочитав поддерживаемые Postgres типы данных и догадавшись, как rails справится с этим.

https://www.postgresql.org/docs/10/datatype-numeric.html

create_table :transactions, id: :bigserial do |t|
  #other model stuff here
end

Проверено подключением напрямую к postgres

                                                              Table "public.transactions"
    Column     |            Type             | Collation | Nullable |                       Default                       | Storage  | Stats target | Description
---------------+-----------------------------+-----------+----------+-----------------------------------------------------+----------+--------------+-------------
 id            | bigint                      |           | not null | nextval('ghost_card_transactions_id_seq'::regclass) | plain    |              |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...