PostgreSQL «синтаксическая ошибка в конце ввода» после INSERT INTO с условием ON CONFLICT DO UPDATE - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь написать код 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.

Есть предложения, как его решить?

1 Ответ

0 голосов
/ 26 февраля 2020

Я нашел решение.

Причиной ошибки было выбранное мной ограничение.

Условие CONFLICT должно быть CONSTRAINT. Например, первичные ключи.

См. Полную документацию здесь: https://www.postgresql.org/docs/9.5/sql-insert.html

ON CONFLICT может использоваться для указания альтернативного действия по поднятию уникального ошибка нарушения ограничения или исключения. (См. Пункт «О КОНФЛИКТЕ» ниже.)

...