есть id, user_id, offer_json, date_time, version.
Идея в том, что 1 юзер в 1 день может постить много offer_json. Я хочу с каждым новым INSERT-ом для конкретного юзера в конкретную дату увеличивать version на 1, чтобы в итоге можно было получить последнюю версию офера для юзера в определенный день.
Как это проще сделать?
А вам точно нужен порядковый номер в течение суток? Так-то последнюю версию легко получить отсортировав по id или date_time.
Ну, у меня там не совсем datetime, а просто date ж) но порядковый номер нужен)
Так добавьте datetime!
Мне нужно инкрементить версию)
extract(epoch from (now() - now()::date))*1000000::integer;
Тогда уж проще за версию считать id ))
Вообще, на самом деле, если по (user_id, date_time, version) есть индэкс -- то это дажэ довольно быстро выполняется. Да что там, дажэ если по (user_id, date_time) -- скорее всего, тожэ. Другой очевидный вариант -- создать отдельную табличку версий по дням либо сегодняшних версий (смотря что нужнее). Но во всех этих вариантах всегда есть какбы проблема что два клиента могут одновременно вставлять данные, и без SET TRANSACTION ISOLATION LEVEL SERIALIZABLE у них появятся две версии.
Обсуждают сегодня