2017-02-11 8 views
1

は、私はこの1つに類似のPostgreSQLを持つテーブルがある:INSERT ... ON CONFLICT DO UPDATEとTIMESTAMPを自動的に更新する方法は?

mytableは:私は挿入を行う際に

id 
col2 
col3 
import_ts TIMESTAMP(0) WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP 

をだから、私はこの列の任意の値を指定する必要はありませんし、現在のタイムスタンプが自動的に挿入された。しかしながら

、以下のようなクエリを使用する場合:

INSERT INTO mytable (id, col2, col3) VALUES (%s, %s, %s) 
          ON CONFLICT (id) DO UPDATE 
          SET col2 = %s, col3 = %s; 

結果は予想通りINSERTの場合、import_tsが自動的に挿入されることです。 UPDATEの場合、列import_tsは更新されません。

私はpythonpsycopg2を使用していますようimport_tsは、更新したために、私はSETimport_ts = %sに追加し、現在の時刻を渡すことができます。しかし、あるケースではタイムスタンプが自動的に追加され、もう1つのタイムスタンプは自動的に追加されます。私は常にPostgreSQLによって自動的に行われることを望んでいます。それは可能ですか?

答えて

2

確かに、ちょうどnow() functionを使用します。

INSERT INTO mytable (id, col2, col3) VALUES (%s, %s, %s) 
    ON CONFLICT (id) DO UPDATE 
    SET col2 = %s, col3 = %s, import_ts = now(); 
+0

私はデフォルトが使用されることを望んでいたSQLに何とか言っで考えていたが、それは間違いなく十分に簡単です。私の目を開けてくれてありがとう;) – J0ANMM

関連する問題