6

如何在 Greenplum 数据库上使用 psycopg2 获取最后插入的行的 ID?

这里有几件我已经尝试过但不起作用的事情。

  • Greenplum 不支持返回。
  • psycopg2 的 cursor.lastrowid 总是返回 0。
  • SELECT nextval() 给了我下一行 id,但也会增加计数器,因此实际插入的行使用不同的 id。
  • 不支持 SELECT currval()。

提前致谢。

4

4 回答 4

1
def last_insert_id(cursor, table_name, pk_name):
    sequence = "{table_name}_{pk_name}_seq".format(table_name=table_name,
                                                       pk_name=pk_name)
    cursor.execute("SELECT last_value from {sequence}".format(sequence=sequence))
    return cursor.fetchone()[0]

你应该尝试这样的方法来解决你的问题,让它有点通用。

于 2013-05-16T14:38:56.780 回答
1

我认为你能得到的最接近的是select * from seq_name

dwh=# select * from queue_id_seq;
 sequence_name | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called 
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 queue_id_seq  |        127 |            1 | 9223372036854775807 |         1 |           1 |      32 | f         | t

last_value显示任何会话分配的最后一个值

或者,您可以根据“自然主键”回读插入的行

我不会使用 nextval() 因为序列不是无间隙的。

于 2012-11-16T13:53:38.963 回答
0

SELECT lastval() 做你想做的事吗?

根据序列操作函数的postgres(我收集GreenPlum基于)文档,它应该“返回当前会话中nextval最近返回的值”。

于 2012-09-25T15:55:00.960 回答
-1

如果你想插入最后一个 id 你可以做一个基本的 sql 搜索最大 id 号

于 2013-01-04T17:51:16.797 回答