RedShift / PostgreSQL 中串行类型的替代方案
Posted
技术标签:
【中文标题】RedShift / PostgreSQL 中串行类型的替代方案【英文标题】:Alternative for Serial type in RedShift / PostgreSQL 【发布时间】:2013-08-22 19:46:35 【问题描述】:我实际上是在尝试让 Rails 与 RedShift 一起工作,并面临 Rails 默认索引的一些问题。我的工作基于 repo activerecord-redshift-adapter。
默认情况下,Rails 使用 SERIAL 类型来创建他的主键。不幸的是,这不受 RedShift 支持。所以我实际上是在尝试找到这种 SERIAL 类型的替代品,然后在我们找到可行的解决方案后分叉 repo。我正在考虑一个 BIGINT,来自 RedShift offer。
要更改的行位于此处redshit_adaptated.rb (Line 252)。
任何提议,更好的解决方案?
【问题讨论】:
您打算如何生成该序列? Redshift 还有CREATE SEQUENCE
吗?因为如果是这样 - SERIAL
只是一个方便的伪类型,可以用CREATE SEQUENCE
替换,然后创建一个带有default nextval('sequence_name')
的bigint 列的表,最后是ALTER SEQUENCE .. OWNED BY
。
我实际上不知道如何生成序列,这就是问题所在。RedShift 不支持 (see Sequence manipulation functions) CREATE SEQUENCE
,如果 SERIAL 只是对此的约定,这是有道理的。还有其他想法吗?
尝试创建标识列,以便 Redshift 生成序列号。如果你想保留现有的 Rails 序列号,那么从标识开始,可能是最大数量。
【参考方案1】:
SERIAL
的直接替换是 IDENTITY(seed, step)
参考http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html
【讨论】:
以上是关于RedShift / PostgreSQL 中串行类型的替代方案的主要内容,如果未能解决你的问题,请参考以下文章
昨天 - 在 Redshift 和 PostgreSQL 中 - 日期添加兼容性
使用 Amazon Redshift / PostgreSQL 进行队列分析
Redshift/PostgreSQL 中子查询的 GroupAggregate
使用 Redshift (PostgreSQL) 和计数的数据透视表
psycopg2/python 将数据从 postgresql 复制到 Amazon RedShift(postgresql)