6

Greenplum データベースで psycopg2 を使用して、最後に挿入された行の ID を取得するにはどうすればよいですか?

ここでは、私がすでに試した中でうまくいかないことをいくつか紹介します。

  • RETURNING は Greenplum ではサポートされていません。
  • psycopg2 の cursor.lastrowid は常に 0 を返します。
  • SELECT nextval() は次の行 ID を提供しますが、実際に挿入された行が別の ID を使用するようにカウンターもインクリメントします。
  • SELECT currval() はサポートされていません。

前もって感謝します。

4

4 に答える 4

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 に答える
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 に答える
0

SELECT lastval() はあなたが望むことをしますか?

シーケンス操作関数の postgres (GreenPlum が基づいていると私が収集したもの) によると、「現在のセッションで nextval によって最近返された値を返す」必要があります。

于 2012-09-25T15:55:00.960 に答える
-1

最後のIDを挿入する場合は、最大ID番号の基本的なSQL検索を実行できます。

于 2013-01-04T17:51:16.797 に答える