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()”

Oracle中NEXTVAL 和 CURRVAL的使用

MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync

超强数据源覆盖能力,永洪科技BI产品全面支持Greenplum

在postgreSQL中用currval计算年龄