Я, видимо, запутался в функции Persistent upsert
и в том, как она работает с Postgres 9.5.
Я пишу приложение Yesod, которое принимает значение JSON, анализирует его, а затем выполняет upsert
в соответствующей таблице базы данных. Я проверил, что JSON анализируется в правильное значение. Смотрите код:
postITSClientsR :: Handler TypedContent
postITSClientsR = do
i <- requireJsonBody :: Handler IntensiveTreatmentClient
row <- runDB $ upsert i []
selectRep . provideJson $ row
Я также проверил, что этот тип модели имеет ограничение уникальности:
IntensiveTreatmentClient json
clientId ClientId
UniqueIntensiveTreatmentClientClientId clientId
etc...
Однако мое новое значение не сохраняется. Я проверял это несколько раз, но журнал Yesod, вероятно, является наиболее показательным, поскольку он сообщает:
POST /api/itsClients
Params: [("{\"clientId\":1,...","")]
Request Body: {"clientId":1,...}
Accept: */*
Status: 200 OK 0.005041s
(Поля были преднамеренно удалены для анонимизации) Как правило, журнал будет сообщать о выполненном SQL-запросе, а не о каких-либо.
Что происходит? Yesod или Persistent просто молча отбрасывают мой запрос без ошибок.