Ответы пользователя по тегу PostgreSQL
  • Как хранить интервальное расписание в БД?

    1. Прежде всего, расписание можно задавать естественным языком, или хранить в JSON придумав какой-нибудь DSL, - вне зависимости от базы данных. Превосходная библиотека для этого: https://github.com/kvh/recurrent (хотя поддерживает только английский). Если вам нужно, например, делать рассылки, - вы пробегаете по всем активным расписаниям в цикле, проверяете, соответствует ли текущая дата расписанию, и выполняете действие.
    2. Если такую выборку делать хочется очень быстро и средствами БД, тогда при вводе вышеупомянутого высокоуровневого расписания можно заполнять все даты в некоем кэше (или в отдельной таблице в БД), выставляя флаг для пары (дата, id расписания). При изменении расписания эта матрица для него перевычисляется.
    3. Как быть с исключаемыми днями? Можно в каждом из объектов предлагать два поля: "Расписание" (например: every friday) и "Исключая" (например: 1 Jan - 10 Jan).
    Ответ написан
    Комментировать
  • Безопасно ли использовать jsonb в PostgreSQL?

    Существуют для этого модули. Например:

    https://github.com/djangonauts/django-hstore хранит список пар "ключ-значение". Кроме того, можно задавать схему кастомных полей - указывать их список и типы; в модели, в ModelForm, в админке появляются новые поля, неотличимые от настоящих, но хранящиеся на самом деле в колонке типа hstore.

    https://github.com/bradjasper/django-jsonfield - уже для полноценного валидируемого JSON.

    Использовал эти вещи раза два, а именно первую библиотеку. Можно схему менять в зависимости от разных параметров модели, всё очень красиво и удобно. В production, однако, по разным причинам не попало пока. Не знаю, может быть ещё доберусь до боевого использования.

    Вообще очень неудобно, что такие вольности со схемой в реляционных СУБД делаются так трудно и костылеобразно.
    Ответ написан