如何獲取在Greenplum數據庫上使用psycopg2插入的最後一行的ID?獲取最後插入的行ID與Psycopg2和Greenplum數據庫
下面是我已經嘗試過的幾件事情,不起作用。
- Greenplum不支持RETURNING。
- psycopg2的指針.lastrowid始終返回0.
- SELECT nextval()給我下一行id,但也遞增計數器,因此實際插入的行使用不同的id。
- 不支持SELECT currval()。
在此先感謝。
如何獲取在Greenplum數據庫上使用psycopg2插入的最後一行的ID?獲取最後插入的行ID與Psycopg2和Greenplum數據庫
下面是我已經嘗試過的幾件事情,不起作用。
在此先感謝。
SELECT lastval()做你想要的嗎?
根據postgres(我收集GreenPlum基於)Sequence Manipulation Functions的文檔,它應該「返回當前會話中最近由nextval返回的值」。
我認爲你可以得到最接近的是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(),因爲序列沒有間隙。
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]
你應該嘗試這樣的事情通過使有些通用的解決你的問題。
GP不支持lastval()currval()函數 – mys 2012-11-16 13:41:07