如何在 Greenplum 数据库上使用 psycopg2 获取最后插入的行的 ID?
这里有几件我已经尝试过但不起作用的事情。
- Greenplum 不支持返回。
- psycopg2 的 cursor.lastrowid 总是返回 0。
- SELECT nextval() 给了我下一行 id,但也会增加计数器,因此实际插入的行使用不同的 id。
- 不支持 SELECT currval()。
提前致谢。
如何在 Greenplum 数据库上使用 psycopg2 获取最后插入的行的 ID?
这里有几件我已经尝试过但不起作用的事情。
提前致谢。
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]
你应该尝试这样的方法来解决你的问题,让它有点通用。
我认为你能得到的最接近的是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() 因为序列不是无间隙的。
SELECT lastval() 做你想做的事吗?
根据序列操作函数的postgres(我收集GreenPlum基于)文档,它应该“返回当前会话中nextval最近返回的值”。
如果你想插入最后一个 id 你可以做一个基本的 sql 搜索最大 id 号