Альтернатива для типа Serial в RedShift/PostgreSQL

На самом деле я пытаюсь заставить Rails работать с RedShift и сталкиваюсь с некоторыми проблемами с индексами Rails по умолчанию. Моя работа основана на репозитории activerecord-redshift-adapter.

По умолчанию Rails использует тип SERIAL для создания своего первичного ключа. К сожалению, это не поддерживается RedShift. Поэтому я на самом деле пытаюсь найти альтернативу этому типу SERIAL, а затем разветвить репо, как только мы найдем жизнеспособное решение. Я думаю о БОЛЬШОМ, исходя из того, что предлагает RedShift.

Строка для изменения находится здесь redshit_adaptated.rb (строка 252).

Любое предложение, лучшее решение?


person Kim C.    schedule 20.08.2013    source источник
comment
Как вы собираетесь генерировать эту последовательность? У Redshift все еще есть CREATE SEQUENCE? Потому что если так - SERIAL это просто удобный псевдотип, который можно заменить на CREATE SEQUENCE, затем создание таблицы со столбцом bigint на default nextval('sequence_name') и, наконец, ALTER SEQUENCE .. OWNED BY.   -  person Craig Ringer    schedule 21.08.2013
comment
На самом деле я не знаю, как создать последовательность, вот в чем вопрос. RedShift не поддерживает (см. Функции манипулирования последовательностями) CREATE SEQUENCE, которые имеют смысл, если SERIAL является просто соглашением для этого. Любые другие идеи?   -  person Kim C.    schedule 09.09.2013
comment
Попробуйте создать столбец идентификаторов, чтобы Redshift генерировал порядковые номера. Если вы хотите сохранить существующие серийные номера Rails, начните с идентификации с этого максимального номера.   -  person androboy    schedule 18.09.2014


Ответы (1)


Прямой заменой SERIAL является IDENTITY(seed, step) Ссылка http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html

person Arthur    schedule 06.09.2016