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

    Melkij
    @Melkij
    DBA для вашего 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?
    Ответ написан
    Комментировать
  • Как сделать INSERT поля password, которое содержит два доллара и одинарную кавычку?

    Fragster
    @Fragster
    помогло? отметь решением!
    Выкинуть вставку параметров в запросы через конкатенацию, использовать prepared statements
    Не хранить в базе пароль, а только хэш от него (причем засоленный)
    exploits_of_a_mom.png
    Ответ написан
    4 комментария
  • Почему при отключении питания, система переходит в режим read-only?

    @rPman
    Могу только догадываться (странно что это появилось после установки ssd), но выглядит все следующим образом.

    Для выключения питания, операционная система сначала завершает все процессы и службы, затем переводит файловые системы в readonly (со сбросом кеша) и посылает с помощью acpi сигнал на выключение... но из-за плохой реализации поддержки в некоторых брендовых решениях (собственно пилится это реверсинженерингом, а компании производители железа не шевелятся публиковать нормальные спецификации или скорее намеренное вредительство, если текущая ОС не windows, то поддержка acpi ломается) это не работает.

    Правильно - починить поддержку acpi (может погуглить название своей материнки/чипсета добавив acpi linux или еще как).

    попробуйте прописать в grub в опциях ядра acpi_osi="Windows 2009"
    Ответ написан
    1 комментарий
  • Можно ли отключить track_activities в Postgresql16?

    fzfx
    @fzfx
    18,5 дм
    SET track_activities = off;, как и другие SET-команды, позволяющие менять параметры без перезапуска, работает только в пределах сессии.
    Для смены в пределах кластера следует пользоваться ALTER SYSTEM SET: https://postgrespro.ru/docs/postgresql/17/sql-alte...
    Например:
    ALTER SYSTEM SET track_activities = off;
    Поскольку этот параметр можно менять без перезапуска PostgreSQL, далее для применения должно быть достаточно выполнить SELECT pg_reload_conf();
    Будете проверять с помощью SHOW track_activities; - не забудьте перезайти в psql.
    Ответ написан
    1 комментарий
  • Как отследить изменения файлов в Bitrix?

    @koder_1
    Битрикс программист
    1) Есть git.
    2) Можно права задать на файлы минимальные, но так чтоб еще работал сайт.
    Ответ написан
    Комментировать
  • Как передать инструкции процессора avx avx2 fma в VirtualBox в гостевую ос?

    @Zerg89
    Вот очень похожая тема stackoverflow.com
    Ответ написан
    Комментировать
  • Как можно исправить такую ошибку?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://www.google.com/search?q=watchdog+bug+soft+...

    смотрите и думайте

    По ходу у вас память глючит
    Ответ написан
    Комментировать
  • Какой linux поставить на современный ноутбук?

    @Drno
    linux mint
    Ответ написан
    Комментировать
  • Если синхронизировать данные с удаленного сервера, где правильно запускать rsync, на сервере или на клиенте?

    @pfg21
    ex-турист
    без разницы, рсинк двухсторонний.
    там где удобнее и нужнее запускать рсинк там его и запускай
    Ответ написан
    Комментировать
  • Если синхронизировать данные с удаленного сервера, где правильно запускать rsync, на сервере или на клиенте?

    Adamos
    @Adamos
    Не сильно же удален ваш сервер, если они в одной подсети.
    И вообще-то backup пишется иначе.
    Я обычно запускаю бэкап с той машины, на которой он хранится.
    Во-первых, обратной связи сплошь и рядом просто не бывает (реально удаленный сервер не дотянется до локального за NAT),
    Во-вторых, это же бэкап. Вы его делаете - на случай факапа. И вот на этот крайний случай логично настраивать все так, чтобы та машина, на которой ожидаются проблемы, не имела доступа к бэкапу и не могла его испортить ни при каком сценарии.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Значения полей readonly можно менять динамически, в конструкторе класса. Последующие изменения невозможны.

    public class MyClass
    {
    
      public readonly int Value = 0;
    
      public MyClass()
      {
        this.Value = 123;
      }
    
    }


    Для чего это использовать - зависит от фантазии.

    Например, можно создать класс User и сделать readonly поле, содержащее идентификатор пользователя. Таким образом, идентификатор пользователя можно будет указать только при инициализации класса и, в последующем, изменить его будет невозможно. Это позволит избежать проблем в логике, которые еще предстоит придумать :-)

    Если сравнивать со свойствами и константами, то значения readonly свойств могут меняться в процессе жизненного цикла класса. Значения readonly полей, как уже было сказано ранее, можно указывать только при объявлении и в конструкторе класса.

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

    В дополнение, немного кода (Console Application):
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Timers;
    using System.Threading;
    
    namespace ConsoleApplication20
    {
    
      class Program
      {
        static void Main(string[] args)
        {
          // создаем экземпляр класса
          var t = new Toster(199065);
          // выводим значение константы ProjectName
          // доступ только через Toster
          Console.WriteLine(Toster.ProjectName);
          // доступа к локальным константам здесь нет
          // Toster.CounterPattern
          // t.CounterPattern
    
          // выводим заголовок вопроса
          Console.WriteLine(t.Title);
    
          // бесконечность - не предел!
          while (true)
          {
            // t.Id = 123;
            // мы не можем поменять идентификатор
            // следовательно, этот код, логически, будет работать правильно
    
            // выводим число ответов
            Console.WriteLine("Ответов: {0}", t.AnswersCount);
    
            // t.AnswersCount = 123
            // мы не можем менять значение readonly свойства,
            // но оно может меняться внутри экземпляра класса
    
            // пауза 10 сек.
            Thread.Sleep(10000);
          }
        }
      }
    
      public class Toster
      {
    
        // публичная константа, доступ через Toster
        public const string ProjectName = "Тостер";
    
        // локальная константа, доступна только в рамках этого класса
        const string CounterPattern = "<span class=\"section-header__counter\" role=\"answers_counter\">";
    
        // публичные поля только для чтения
        // значение может быть установлено в конструкторе
        public readonly string Title = "Нет данных";
        public readonly int Id = 0;
        
        // свойство только для чтения
        // значение может меняться в процессе жизни экземпляра класса
        // при помощи локальной переменной
        private int _AnswersCount = 0;
        public int AnswersCount
        {
          get
          {
            return _AnswersCount;
          }
        }
    
        // это просто таймер
        private System.Timers.Timer Timer = null;
    
        // а это конструктор<s>, но не Lego</s>
        public Toster(int id)
        {
          if (id <= 0) { return; }
          
          // получаем вопрос
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", id));
          // из шаблона url тоже можно сделать константу
          // либо в классе можно сделать readonly свойство, 
          // которое будет на лету формировать итоговый адрес:
          // return String.Format("https://toster.ru/q/{0}", this.Id)
    
          // устанавливаем значения для полей
          this.Id = id;
          this.Title = WebUtility.HtmlDecode
          ( 
            result.Substring
            (
              result.IndexOf("<title>") + "<title>".Length,
              result.IndexOf("</title>") - result.IndexOf("<title>") - "<title>".Length
            )
          );
          // выдергиваем число ответов на вопрос
          this.ParseAnswersCount(result);
    
          // запускаем периодическую проверку <s>Менделеева</s>
          Timer = new System.Timers.Timer(10000);
          Timer.Elapsed += Timer_Elapsed;
        }
        
        // обработчик истечения интервала времени 
        private void Timer_Elapsed(object sender, EventArgs e)
        {
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", this.Id));
          this.ParseAnswersCount(result);
        }
    
        // выдергиватель количества ответов
        private void ParseAnswersCount(string value)
        {
          int startstart = value.IndexOf("Ответы на вопрос");
          int start = value.IndexOf(CounterPattern, startstart) + CounterPattern.Length;
          int len = value.IndexOf("</span>", start) - start;
          _AnswersCount = Convert.ToInt32(value.Substring(start, len));
        }
        
      }
    
    }
    Ответ написан
    Комментировать