Как сделать автогенерацию primary key с датой в Posgresql?
Задача такая - надо, чтобы в таблице в каждой строке генерился некий уникальный ID формат которого состоит из года + уникального 7 значного ID, при этом, чтобы каждый последующий год ID начинался с 1.
т.е.
2022-0000001
2022-0000002
...
2022-7755998 2023-0000001
В идеале всю генерацию повесить на posgre, потому, что на стороне кода это сделать может оказаться проблемным т.к. там нередко возникает ситуация, когда одновременно разными запросами приходит много информации, которая требует добавления строк в таблицу и если генерить ID на стороне кода, то возникает проблема синхронизации...
Подскажите как лучше выкрутиться
Ну сделайте отдельное уникальное поле и триггер, который его генерирует.
Ещё можно сделать serial, который 1 января принудительно поднимать до 2023XXXXXXX, тогда в обычных ситуациях он сам будет заполнять поле нормальным значением без дополнительных усилий. Главное успевать переключить год до первых записей нового года (хотя, возможно, в вашей ситуации и некритично, если несколько записей останутся в предыдущем году).
Но в целом это дурацкий подход в любом слуаче. Можно добавлять в отображаемые поля что угодно, но первичный id лучше пусть будет сквозным. Так, кстати, часто делают, например, с номерами договоров в разных системах: они монотонны, а для удобства взаимодействия с контрагентами и быстрого определения актуальности договора в них можно добавлять текущий год.
Ну, необходимость обусловлена регламентом заказчика о порядке нумерации сервисных заявок. Просто им серверную часть давно сдали, но с нумерацией накосячили. А я на 80% фронт, на 20% бекэнд и с СУБД напрямую практически не пересекаюсь, поэтому не знаю, какие механики в posgre для этого вообще существуют...