Greenplum 数据库:不支持 Currval()
Posted
技术标签:
【中文标题】Greenplum 数据库:不支持 Currval()【英文标题】:Greenplum Database : Currval() not supported 【发布时间】:2014-04-03 16:42:59 【问题描述】:我正在尝试使用
SELECT currval('myTable_Orderid_seq');
我收到错误:currval not supported.
非常感谢任何解决此问题的方法。 我需要在多用户环境中为每个用户的会话使用 currval。
【问题讨论】:
如果您在此之前调用过nextval()
,则只能调用currval()
。请现在升级到受支持的版本
@a_horse_with_no_name-ty 供您发表评论。我可以在没有错误的情况下使用 nextval,但对于 CURRVAL,我得到了相同的错误。我希望它可以升级到最新版本。这就是为什么我需要解决这个问题。
再次:您必须在调用nextval()
在同一会话中调用currval()
之前 >
当您说“PostgreSQL 8.2.15”时,我猜测您真的是指“Greenplum Database 4.x”或“Amazon Redshift”或“ParAccel”或类似的东西,一些 PostgreSQL fork?
【参考方案1】:
如果 currval 在会话中(还)不可用,您可以这样做:
select last_value from myTable_Orderid_seq
来自文档:http://www.postgresql.org/docs/current/static/sql-createsequence.html
虽然不能直接更新序列,但可以使用查询 喜欢:
从名称中选择 *;
检查序列的参数和当前状态。在 特别是,序列的 last_value 字段显示最后一个值 由任何会话分配。 (当然,这个值可能会被 打印的时间,如果其他会话正在积极执行 nextval 电话。)
【讨论】:
欢迎您的回复。我得到了最后插入的序列 ID,这很好。但是根据您的陈述“特别是,序列的 last_value 字段显示了任何会话分配的最后一个值。”,如果有多个用户输入记录,我似乎无法获得 last_value 字段。如果我错了,请纠正我。 我不太明白这个问题。 last_value 反映了对任何会话发出的最后一个值。所以它无论如何都显示了一些东西。该值不必由同一个会话使用,但它显示最后一个。 @Nemo 在史前较少的 PostgreSQL 版本中,您将使用INSERT ... RETURNING
执行此操作以获取生成的值。但在 8.2.x 中是不可能的。
@Nemo:“如果有多个用户输入记录,我似乎无法获得 last_value 字段”您将通过任何(已经终止的)事务获得序列的最后一个递增值;但我非常怀疑您是否真的想这样做,这只是闻起来很糟糕(例如,如果某些事务回滚,您将获得未记录的序列值)。我告诉过你两次仔细阅读文档并详细告诉我们你想做什么。
@Craig Ringer- 很奇怪!我的 Greenplum db 版本甚至不支持“返回”。期待您的回复。以上是关于Greenplum 数据库:不支持 Currval()的主要内容,如果未能解决你的问题,请参考以下文章
Greenplum:有没有办法定义一个数据将只存储在 master 中的表
Greenplum 中的 JPA 异常“不支持 lastval()”
MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync