Задать вопрос
  • Как корректно завершить процесс postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Отсутствие реакции на SIGTERM при продолжающемся потреблении CPU это примечательно. Но без -dbgsym и GDB ничего определённого выяснить фактически не удастся. Суть - как-то попали в какую-то ветвь кода, которая не считалась что может занимать продолжительное время и вызов обработчика сигналов CHECK_FOR_INTERRUPTS там не был предусмотрен. Из вариантов навскидку где возможно в 16.х наступить - dblink или fdw, create index using hash. Традиционно, ещё могут быть index scan по gin или gist, не в первый раз находятся у них такие грабли.
    Как минимум, удостовериться, что используется свежая минорная версия. Завтра 16.9 выходит.

    Ну, это из предположения что весьма подозрительный watchdog: BUG: soft lockup тут ни при чём. Что это такое я вряд ли подскажу. Выглядит нехорошо.

    Такс, это всё про оставшийся процесс.
    Про сам the database system is shutting down
    При crash recovery делается immediate stop, все backend которые не завершаться за 5 секунд получат SIGKILL. Который, естественно, проигнорировать уже не могут, потому что процессу про SIGKILL никто даже и не скажет, его просто снимет ядро ОС.
    Значит, перед всеми the database system is shutting down был received smart shutdown request или received fast shutdown request, который кто-то скомандовал явным образом. Оба режима штатного выключения не делают SIGKILL, а именно дождутся корректного завершения процесса. В случае с багом, когда процесс не отреагировал на SIGTERM, ну, вечно ждать и будет. Других вариантов кроме SIGKILL тут нет.

    Если логи ещё сохранились на дату shutdown request - то смотреть что там делали с системой, что кто-то скомандовал stop или restart базе. Если не вмешательство администратора, то может быть какой-то аналог unattended-upgrades?
    Ответ написан
    Комментировать
  • Как узнать первые признаки, что ноутбук больше не включится?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    Никак. ПК может проработать как пять минут и двинуть кони, так и запросто 10-20 лет без поломок. Надо просто периодически обслуживать (менять термопасту, чистить от грязи, пыли и т.п.), эксплуатировать в нормальных условиях, не допускать перегрева, следить за показаниями смарта дисков и прочее. Выход железа из строя практически всегда происходит внезапно. Да, бывают неисправности, которые приводят к частичному отказу - нестабильное поведение, перезагрузки, падение ПО и прочее. Но это тоже случается непредсказуемо.

    Не может что прям все идеально работает, а завтра не включится.

    Может и случается регулярно - это вполне обычное явление.
    Ответ написан
    Комментировать
  • Как работать с датой записанной в поле формата числа с плавающей точкой?

    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
    Системный администратор
    Лучше не надо

    UPD
    Появилось некое решение supercronic - ещё не тестировал, но судя по описанию выглядит перспективно.
    Ответ написан
    Комментировать
  • Крон внутри докера?

    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 комментариев