Задать вопрос
  • Как работать с датой записанной в поле формата числа с плавающей точкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Этот способ хранения даты тянется ещё с Lotus 1-2-3. Когда Microsoft добавляла дату/время в Excel, то для совместимости использовали тот же формат.
    Отсчёт ведётся от 30.12.1899. Целая часть - количество дней, прошедших с этой даты, дробная часть - время. Если дробную часть умножить на 24*60*60, то получим количество секунд с начала дня.
    Встроенных функция для преобразования в PostgreSQL нет, так что, видимо, это прямой перенос из чего-то типа MSAccess.
    45672.38114849537 соответствует 2025-01-15 09:08:51.230
    Получить можно, например, так:
    SELECT
      date_lotus,
      '1899-12-30'::date + MAKE_INTERVAL(days => date_lotus::int, secs => ((date_lotus - date_lotus::int) * 24*60*60)::int) AS datetime
      FROM test;
    
    | date_lotus        | datetime            |
    | ----------------- | ------------------- |
    | 45672.38114849537 | 2025-01-15 09:08:51 |
    Ответ написан
    Комментировать
  • Как работает \G в регулярных выражениях?

    @dodo512
    Якорный метасимвол \G в PHP и Ruby соответствует началу текущего совпадения, а в Perl. java.util.regex и языках .NET – концу предыдущего совпадения.
    В подавляющем большинстве случаев конец предыдущего совпадения и начало текущего совпадения это одно и то же, но в некоторых редких случаях эти две позиции могут различаться.

    https://www.rexegg.com/regex-anchors.php#G

    Например, строка A=1:2:3 B=1:2:3 A=1:2:3:4:5 B=1:2:3

    Шаблон поиска ((?:A=|\G)\d):
    Строка замены $1.

    Результат A=1.2.3 B=1:2:3 A=1.2.3.4.5 B=1:2:3

    https://regex101.com/r/nuWRBb/1

    Как работает \G подробнее в книге Джеффри Фридла "Регулярные выражения".
    Ответ написан
    Комментировать
  • Jumbo frame для игрового сервера есть смысл включать?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Улучшает, если этот размер MTU поддерживается на всём пути между сервером и клиентом. В противном случае - ухудшает.
    Ответ написан
    Комментировать
  • Крон внутри докера?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Ответ написан
    Комментировать
  • Крон внутри докера?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Не нужно "именно внутри контейнера".

    Делайте отдельный контейнер, запускайте с хоста или юзайте оркестратор, в котором есть CronJob.
    Ответ написан
    Комментировать
  • 10к строк по базе размером 500кк?

    @galaxy
    SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    проще всего так, наверно:

    CREATE EXTENSION pg_trgm;
    
    CREATE INDEX trgm_domain_base_idx ON base USING GIST (domain gist_trgm_ops);
    
    EXPLAIN ANALYZE SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    https://www.postgresql.org/docs/current/pgtrgm.html
    Ответ написан
    Комментировать
  • Почему сервер не может подключиться к Postgres внутри контейнера?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Между контейнерами коннектиться не по 127.0.0.1, а по имени контейнера.
    Ответ написан
    Комментировать
  • Как выглядит sudoers?

    postgres не нужно прописывать в sudoers, если ты не знаешь, что именно нужно запускать через sudo от имени этого пользователя
    Ответ написан
    Комментировать
  • Нужно ли покупать доменное имя для AD?

    akelsey
    @akelsey
    домен лучше приобрести сразу, хотя это не необходимо, но стоит копейки, когда созреете - его займут.
    а по неймингу в АД отвечал давно тут
    Плоское имя типа "KITRUS" как рекоммендуют выше, так же не исползьуйте.
    Ответ написан
    3 комментария
  • Как перенаправить Nginx на три разных контейнера Docker?

    Каждое из приложений должно понимать, что оно работает по адресу /webX. Если не понимает, возможны перенаправления на url, которые вы не учли. В целом, для современных сложны приложений, так работать не будет.
    Ответ написан
    Комментировать
  • Почему вместо 100, по проводу 95?

    @ElxkoT
    Потому что 100 мегабит у вас на канальном уровне. С учётом размера заголовков пакетов и прочих технических накладных расходов в 100мб линк как раз можно впихнуть в районе 94-95мб реальной полезной нагрузки
    Ответ написан
    16 комментариев
  • Как работают явные блокировки в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Блокировки строк и блокировки таблиц (и прочих объектов) - два разных механизма. (а serializable изоляция и вовсе частично третий)

    Блокировки строк отмечают информацию о себе специальными флагами в заголовке самой заблокированной строки. Запросы, которым нужна блокировка строки сначала проверяют, не отмечена ли эта строка блокировкой, затем проверяют что сейчас с той транзакцией, идентификатор transaction ID которой указан в информации о блокировке. Если транзакция ещё в работе - то начинаем ждать её завершение (или пропускаем строку для skip locked или кидает ошибку если nowait)
    Блокировки строк, будь то select for share/for update или пишущие запросы, всегда работают с самой актуальной версией строки.

    В то же самое время, любой запрос, трогающий таблицу (даже select) берёт блокировку на эту таблицу соответствующего своим потребностям уровня. Пока не возьмёт блокировку на таблицу - вообще не начнёт выполняться. Информация об этих блокировках размещается в сегменте shared memory памяти, потому доступны всем процессам базы. Если другие бекенды не держат блокировку таблицы конфликтующую с желаемым нашей транзакцией (или ещё только ждут блокировку более высокого уровня), то запрос блокировки удовлетворяется и работа продолжается.
    Ответ написан
    Комментировать
  • Секционирование таблицы по хэшу. В чем принцип?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как-как. Вызывается некоторая хэш-функция для значений ключа партицирования, её результат делится нацело на modulus, строка попадёт в ту партицию, для которой совпадает remainder.

    create table part (i int) partition by hash (i);
    create table part_0 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 0);
    create table part_1 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 1);
    insert into part select generate_series(1,10);
    select * from only part_0;
    select * from only part_1;


    на слишком малых выборках хэш ожидаемо может быть не столь равномерно распределён.
    Ответ написан
    Комментировать
  • Как определить MAC-адрес в ОС AstraLinux активной сетевой карты?

    ip --json link | jq -r '.[]|select(.operstate=="UP").address'
    Ответ написан
    Комментировать
  • Какой отечественный linux выбрать для веб-разработки?

    @AlexVWill
    Какой отечественный linux выбрать для веб-разработки?

    Никакой. Для web-разработки абсолютно фиолетово какой у тебя Linux, отечественный или нет. И если нет какой то особой осознанной нужды в использовании именно отечественных изделий, то лучше держаться от них подальше.
    Ответ написан
    3 комментария
  • CREATE USER не учитывает регистр?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://www.postgresql.org/docs/current/sql-syntax...
    соответствовать синтаксису идентификаторов.
    Ответ написан
    Комментировать
  • CREATE USER не учитывает регистр?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если кавычек нет, то предполагается, что без учета регистра. Грубо говоря, без кавычек - все в нижний регистр.
    В данном случае, надо добавить кавычки вокруг имени пользователя:
    CREATE USER "PolzaK" WITH PASSWORD

    Но учитывай, что тебе и дальше придется всегда указывать кавычки. В противном случае,
    ALTER USER PolzaK ...
    Тоже самое, что и
    ALTER USER polzak ...
    Ответ написан
    Комментировать
  • Почему компьютеры используют двоичные числа в мантиссе IEEE754 вместо BCD или PDP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    даже 1/3 будет точнее в десятичной системе, чем в двоичной

    А давайте проверим.
    В BCD упаковке мы получим 3.333333333333*10-1, ошибка будет 3.(3)*10-14
    В двоичном представлении получим 1.0101010101010101010101010101010101010101010101010101*2-1 = 3.33333333333333314829616256247*10-1, ошибка 1.4829616256247*10-17
    То есть, ошибка в двоичном представлении в 2000 раз меньше, чем в BCD. А накапливаться ошибка будет и там и там.
    Да, и 52 бита мантиссы на самом деле дают 53 бита значения, поскольку лидирующая единица всегда опускается.
    Ответ написан
    6 комментариев
  • Как выбрать записи из таблицы с макимальным значением за каждый день в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select distinct on (created_at::date) created_at, value from tablename order by created_at::date, value desc;
    Ответ написан
    Комментировать
  • Возможно ли разделить порты коммутатора на отдельные подсети БЕЗ VLAN?

    martin74ua
    @martin74ua Куратор тега Компьютерные сети
    Linux administrator
    СДСМ, учебники по сетям - до понимания.
    Пока вы себе усложняете жизнь, а не упрощаете.
    Ответ написан