0

でpsycopg2を使用して赤方偏移のテーブルに挿入した行の自動IDを取得し、私はpsycopg2ライブラリを使用してのPython 2.7からAmazonで赤方偏移テーブルにレコードを挿入していると私は、自動生成取り戻すしたいと思います挿入された行のプライマリID。Pythonの

ProgrammingError: syntax error at or near "RETURNING" 

は誰のことを行います。

conn=psycopg2.connect(conn_str) 
conn.autocommit = True 

sql = "INSERT INTO schema.table (col1, col2) VALUES (%s, %s) RETURNING id;" 

cur = conn.cursor() 
cur.execute(sql,(val1,val2)) 
id = cur.fetchone()[0] 

私はcur.executeライン上のエラーが表示されます。

私はGoogle検索を使用して、ここや他のウェブサイトで見つけることができます通常の方法、例えばを試してみましたこれを修正したり、同じことを達成する方法を知っていますか?

は、私はそれがRETURNING構文を経て、最後のインサートIDを返すサポートしていないとして、私のコード赤方偏移と現在

答えて

2

ない可能にpsycopg2を使用する必要があります。あなたがする必要があるかもしれないことは、取引の中でSELECT MAX(id) FROM schema.table;を使用することです。あなたが聞きたいとは思っていませんが、Redshiftの現在の状態でできる最高のものです。

+0

これは私が思ったことです、ありがとう@Femi – Zac

+1

悲しいことに、それは真実ではありません。私は私の場合Max(id)アプローチを試みましたが、redshiftはアイデンティティ列の値を順次増加させません。生成されたIDの間にギャップが残る可能性があります。新しく生成されたIDは一意であることが保証されていますが、必ずしもMax(id)よりも高いとは限りません。例えば。テーブルの現在のidは1,2,6,7,8になり、新しいレコードが挿入されますが、一意でmax(id)以下のid3が割り当てられます。 –

+0

@ShrikantPrabhu、指してくれてありがとう。 [この記事](http://www.sqlhaven.com/identity-column-seed-step-with-insert-statements/)では、この問題が調査されています。おそらく最も簡単な試みは 'IDENTITY(1,1)'を使うことですが、それが役に立つのかどうかはわかりません。 実際には、新しく挿入されたレコードに関する情報の欠如のためにRedshiftをどのように使用することができるかわかりません。 – MarSoft