Обновить
259
0.1
Егор Рогов@erogov

Пользователь

Отправить сообщение

Всегда было интересно, почему на SQL так часто пишут is_active = true, хотя логично же просто is_active, как в любом нормальном языке программирования.

Больше скажу: неравнодушные к типографике не ленятся и — написать.

Учёный изнасиловал журналиста.

Benchmarking has demonstrated performance gains of up to 3x in certain scenarios.

новый асинхронный I/O ускоряет запросы в 3 раза

Если упростить до одной фразы: главное — процесс, а не результат.

Ну давайте сравним, что ли. Ткнул почти наугад. Оригинал:

One of the ways Postgres can respond to read queries efficiently is through extensive caching.

Перевод 1:

Один из способов, которым Postgres может обеспечивать эффективное чтение запросов, подразумевает обширное кэширование.

Перевод 2:

Postgres очень эффективно обрабатывает запросы на чтение -- в том числе благодаря развитой системе кэширования.

Спасибо, я лучше второй почитаю.

Для проектов, работающих на версиях PostgreSQL до 12-й, он остается незаменимым решением.

Вот только даже 12-я версия уже не поддерживается. Зачем сейчас что-то, кроме SQL/JSON — большая загадка.

Сейчас машины в разы превосходят людей по скорости перевода, но в то время был нюанс - 1969 год и IBM 701 с 4кб ОЗУ.

IBM 701 — это 1953-й год. В 69-м совсем другие были технологии.

Всегда пожалуйста! Расскажите, Никита, как пришла в голову такая идея и главное — как удалось это отладить? Я долго разбирался (:

Тут, увы, все смешано. Например, колоночное и построчное хранение — тоже перпендикулярная к SQL характеристика.

Да, но если заменить 5 и 3 на другие числа, может получиться уже не так привлекательно (:

Покажу и свое решение задачи про параметры. Оно использует рекурсивный запрос и JSON для отслеживания текущего состояния параметров (есть удобные операции - и || для удаления и добавления ключа в объект, получается имитация множества).

WITH RECURSIVE enumerated AS (
  SELECT *, row_number() OVER (ORDER BY ts) n FROM params
), r(ts, n, params) AS (
  SELECT null::timestamp, 0::bigint, '{}'::jsonb
  UNION ALL 
  SELECT p.ts, p.n,
    CASE
      WHEN p.value IS NULL THEN r.params - p.parameter_name
      ELSE r.params || jsonb_build_object(p.parameter_name, 1)
    END 
  FROM r, enumerated p
  WHERE p.n = r.n + 1 
), lens AS (
  SELECT ts, n, array_length(array_agg(keys),1) len 
  FROM r, jsonb_object_keys(params) keys
  GROUP BY ts, n
), intervals AS (
  SELECT tsrange(ts, lead(ts) OVER (ORDER BY ts)) tsr, max(len) mlen
  FROM lens
  GROUP BY ts
)
SELECT lower(tsmr), upper(tsmr), mlen
FROM (
  SELECT unnest(range_agg(tsr)) tsmr, mlen
  FROM intervals
  WHERE mlen = (SELECT max(mlen) FROM intervals) AND mlen > 1 
  GROUP BY mlen
);

Не, это by design, а не current implementation. Сохраняет первую строку, первая строка определяется по правилам `ORDER BY`, а если это предложение не указано, но ССЗБ. И пример там дальше приведен совершенно однозначный.

https://postgrespro.ru/docs/postgresql/17/sql-select#SQL-DISTINCT

SELECT DISTINCT ON ( выражение [, ...] ) сохраняет только первую строку из каждого набора строк, для которого данное выражение даёт одинаковые значения. Выражения DISTINCT ON обрабатываются по тем же правилам, что и выражения ORDER BY (см. выше). Заметьте, что «первая строка» каждого набора непредсказуема, если только не применяется предложение ORDER BY, определяющее, какие строки должны быть первыми.

Об этом речь?

Чего далеко ходить, вон разработчики хабраредактора отказались от простого текста в пользу не пойми чего с внутренней структурой. Казалось бы, что может пойти не так?

Вот ключевой фрагмент:

Если нам надо дождаться освобождения строки, фактически мы должны дождаться окончания блокирующей транзакции — все блокировки снимаются при фиксации или откате. А для этого можно запросить блокировку номера блокирующей транзакции (которая, напомню, удерживается самой транзакцией в исключительном режиме). Таким образом число используемых блокировок пропорционально числу одновременно работающих процессов, а не количеству изменяемых строк.

После того как вторая транзакция "упрется" в первую заблокированную строку, она уже не продвинется дальше, пока блокировка номера первой транзакции не будет снята.

Справедливости ради. Строчки — это, конечно, нехорошо, надо было строки, но никак не записи. И колонки в литературе встречаются наравне со столбцами.

Записи и поля — это уже нечто не реляционное, обычно в языках программирования. К тому же поле относится к отдельной записи, а вот в качестве ключа в таблице выступают именно столбцы/колонки.

Чушь редкостная

Истинная правда. Но

Вы же в курсе что null не индексируется

в Постгресе как раз индексируются.

С помощью госуслуг бюрократию отлично автоматизировали, но побеждать ее и в мыслях ни у кого нет.

Информация

В рейтинге
4 659-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность