• Есть ли какие-либо практические различия в PostgreSQL между доступом к jsonb через -> и []?

    Melkij
    @Melkij
    PostgreSQL DBA
    Начну с конца - для индексов это критично разные вещи. Планировщик даже пытаться анализировать не станет, эквивалентные это условия или нет. Если у вас есть индекс по my_column -> 'a', а в запросе вы написали "my_column"['b'] - то этот индекс использоваться не будет.

    Касательно самих двух операторов:
    -> ровесник jsonb как такового
    jsonb[element] - jsonb subscripting на языке документации - штука недавняя, лишь только прошлогодняя из pg14. Пока что нужно иметь в виду если вам может потребоваться более старая версия базы.
    По поведению отличий вроде не должно быть никаких. Оба варианта возвращают jsonb, поэтому IRL куда чаще используется ->> возвращающий текст.
    На уровне реализации оба приходят к одному и тому же getKeyJsonValueFromContainer. Вы скорее упрётесь в производительность разбора формата самого jsonb, чем заметите какую-то разницу в производительности родного оператора от type subscripting.
    Ответ написан
    Комментировать
  • Как добавить условие в регулярное выражение?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    ^(?!.*__)@[a-z][a-z\d_]{4,34}$
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю работу с блокировками строк?

    Да, в целом и по сути всё верно. Но иногда бывают нюансы. Например, вот такой запрос правильный и блокировки не требует:
    UPDATE articles SET views = views + 1 WHERE id = 1;

    Но иногда про это забывают и делают не поле + 1, а полученное-ранее-значение-поля + 1. И тогда при конкурентном доступе счётчик начинает работать неправильно и нужно использовать блокировку (а лучше - нормальный запрос выше, который её не требует).
    Ответ написан
    1 комментарий