Я пытаюсь написать код UPSERT на моей PostgreSQL БД.
Используя
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. Я также попробовал ваше решение, добавив оператор SET для каждого столбца, который я хочу обновить, используя EXCLUDED.COLUMN_NAME
Я получил следующее сообщение об ошибке:
ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification Call getNextException to see other errors in the batch.
Есть предложения, как его решить?