Это должно помочь:
Ruby on Rails: UUID в качестве первичного ключа ActiveRecord
Ваша миграция не работает, поскольку UUID не поддерживается. Если вы посмотрите на ссылку, то увидите, что они использовали UUID в качестве имени столбца и строку в качестве типа. Они также отключили столбец id и установили свой UUID: строковый столбец в качестве первичного ключа.
Существует также упрощенный тип в адаптере Postgres, который может быть полезен для понимания того, почему он работает после создания столбца вручную. Хотя он просто отображает UUID в строку.
Исправление миграций, чтобы они могли обрабатывать UUIDs Postgres, могло бы стать хорошим, но в то же время небольшим плодом для вклада, если кто-то, имеющий эту проблему, хотел бы внести свой вклад в Rails, но, учитывая, что UGID Postgres действительно, кажется, мало что делает, и ваше приложение должно генерировать идентификаторы, они могут быть просто строками.