使用ON CONFLICT DO UPDATE条件插入INTO后的PostgreSQL"输入末尾语法错误&qu



我正试图在我的PostgreSQL数据库上编写一个UPSERT代码。

使用

NamedParameterJdbcTemplate

我收到以下错误消息:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [

INSERT INTO MY_TABLE
(ID,DATE_TIMESTAMP,ENVIRONMENT,REGION,ORGANIZATION,ARRIVAL_TIMESTAMP,LAST_UPDATED) 
VALUES (?,?,?,?,?,?,?) 
ON CONFLICT (ID, DATE_TIMESTAMP, ENVIRONMENT, REGION)
DO UPDATE
]; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at end of input] with the root cause
org.postgresql.util.PSQLException: ERROR: syntax error at end of input

查询:

INSERT INTO MY_TABLE
(ID,DATE_TIMESTAMP,ENVIRONMENT,REGION,ORGANIZATION,ARRIVAL_TIMESTAMP,LAST_UPDATED) 
VALUES (:ID,:DATE_TIMESTAMP,:ENVIRONMENT,:REGION,:ORGANIZATION,:ARRIVAL_TIMESTAMP,:LAST_UPDATED) 
ON CONFLICT (ID, DATE_TIMESTAMP, ENVIRONMENT, REGION)
DO UPDATE

我试过没有冲突的情况,效果很好。

我尝试添加SET命令,但没有成功。

我还尝试在DO UPDATE SET语句之后使用setter我也尝试过您的解决方案,使用EXCLUDED.column_NAME 为我想要更新的每一列添加一个SET语句

我收到以下错误消息:

ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification  Call getNextException to see other errors in the batch.

关于如何解决这个问题有什么建议吗?

我找到了一个解决方案。

错误的原因是我选择的约束。

CONFLICT条件必须是CONSTRAINT。例如,主键。

请参阅此处的完整文档:https://www.postgresql.org/docs/9.5/sql-insert.html

ON CONFLICT可用于指定引发唯一约束或排除约束冲突错误的替代操作。(见下文关于冲突条款。(

相关内容

  • 没有找到相关文章

最新更新