Re: Efficient use of ON CONFLICT DO UPDATE with the PostgreSQL JDBC driver

From: Brad DeJong <Brad(dot)Dejong(at)infor(dot)com>
To: Christopher BROWN <brown(at)reflexe(dot)fr>, "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: Efficient use of ON CONFLICT DO UPDATE with the PostgreSQL JDBC driver
Date: 2017-01-13 17:18:01
Message-ID: CY1PR0201MB18972094A178B4D7295BB76CFF780@CY1PR0201MB1897.namprd02.prod.outlook.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Christopher Brown wrote:
> ... I'd like to avoid sending the same data twice ...
> ... when doing something like this:
> INSERT INTO foo (c_uuid, file_data, file_name) VALUES (?, ?, ?)
> ON CONFLICT (c_uuid) DO UPDATE SET file_data = ?, file_name = ?
> ... The SQL syntax (and the query workflow, and parameter order) is specific to PostgreSQL,
> so I'm not against something that varies from the basic "PreparedStatement" syntax.
> If there's a safe way of figuring out the intention, that'd be excellent. ...

I find it easiest to make the intention explicit like this. This is also a more conventient syntax for handling multiple rows because you just extend the "values (?, ?, ?)" to values "(?, ?, ?), (?, ?, ?), (?, ?, ?)".

with params (c_uuid, file_data, file_name) as (values (?, ?, ?))
insert into foo (c_uuid, file_data, file_name)
select c_uuid, file_data, file_name from params
on conflict (c_uuid) do update set (file_data, file_name) = (select file_data, file_name from params)

I ran this statement in 9.6 through pgAdmin 4 in order to verify the syntax (with the ?, ?, ? replaced with literals - I have not yet figured out how to bind parameters to parameterized statements in pgAdmin 4) and the messages were ...

INSERT 0 1

Query returned successfully in 182 msec.

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Brad DeJong 2017-01-13 17:32:07 Re: Efficient use of ON CONFLICT DO UPDATE with the PostgreSQL JDBC driver
Previous Message Jorge Solórzano 2017-01-13 15:40:01 Re: Efficient use of ON CONFLICT DO UPDATE with the PostgreSQL JDBC driver