06 октября 2025

Восстановить запись в журнал сообщений PostgreSQL

Обратил внимание на одну маленькую неприятную особенность PostgreSQL – если удалить текущий файл журнала сообщений, то сервер не создаст новый файл, пока не наступит момент ротации файла. Это наблюдается и под Windows и под Linux. Что делать, если log_rotation_age большой или вовсе установлен в ноль и смена файлов по времени не производится? Можно наплевать на подключенных к базам данных пользователей и перегрузить PostgreSQL. Но есть более безболезненный способ.

29 сентября 2025

Hotfix на Delphi 13.0 Florence Patch 1 для Indy

RTM-версия Delphi 13 Florence включает в себя копию Indy 10.6.3.11, но несколько компонент Indy отсутствуют в палитре компонентов. Потерялись компоненты OAuth SASL, которые были добавлены в Indy 10.6.3.7.

26 сентября 2025

Выпущен Delphi 13.0 Florence Patch 1

Для загрузки и установки доступно первое обновление для Delphi 13.0 Florence, C++Builder 13.0 Florence и RAD Studio 13.0 Florence. Как обычно, первое обновление от команды разработчиков Delphi содержит потерянные в инсталляторе релиза файлы и мелкие фиксы: правильную версию PAServer для MacOS, потерянные файлы библиотеки Indy, фикс падения FireMonkey в design time... Примерный размер - 500 МБ.

22 сентября 2025

Ускоряем поиск с использованием LIKE

Прислали мне SQL-запрос с жалобой, что при определенных параметрах он работает около 10 минут. Хотя в большинстве случаев возвращает данные быстрее, чем за секунду. Запрос не простой. В нем объединяется несколько таблиц и вьюшек, а среди всех условий – регистронезависимый поиск по вхождению строки: UPPER(поле) LIKE '%СТРОКА%'. Мои замечания по поводу UPPER и LIKE по вхождению, так же как и предложения изменить запрос или использовать полнотекстовый поиск не приняли, т.к. запрос создан генератором запросов и переписывать его никто не будет. Проблему усугублял планировщик запросов PostgreSQL. Судя по плану, когда запрос возвращал данные, LIKE выполнялся по уже отфильтрованным данным и проверял несколько десятков строк, и время выполнения было приемлемое. А с параметрами при которых результат запроса был пустой, LIKE выполнялся первым условием и перебирал все строки в таблице. Как результат – жуткие тормоза. Это поведение моделировалось на PostgreSQL с 12-й версии по 17-ю. На MS SQL Server план этого запроса составлялся всегда корректно.

10 сентября 2025

09 сентября 2025

Директива "noreturn" для объявления процедур в Delphi 13 Florence

В компилятор Delphi 13 Florence добавлена директива "noreturn". "noreturn" - это атрибут объявления процедуры, который указывает, что вызов процедуры 100% вызовет исключение, а не завершит обычное выполнение. Это позволит компилятору выполнить оптимизацию путем исключения лишнего кода и пропустить предупреждение о неопределенных результатах в функциях.