Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами
02 февраля 2026
13 октября 2025
Удаление базы данных PostgreSQL с активными подключениями
Базу данных нельзя удалить, если к ней подключены пользователи. Перед удалением базы данных PostgreSQL я всегда выполняю запрос, который для всех подключений к удаляемой базе данных вызывает функцию принудительного завершения процесса подключения:
06 октября 2025
Восстановить запись в журнал сообщений PostgreSQL
Обратил внимание на одну маленькую неприятную особенность PostgreSQL – если удалить текущий файл журнала сообщений, то сервер не создаст новый файл, пока не наступит момент ротации файла. Это наблюдается и под Windows и под Linux. Что делать, если log_rotation_age большой или вовсе установлен в ноль и смена файлов по времени не производится? Можно наплевать на подключенных к базам данных пользователей и перегрузить PostgreSQL. Но есть более безболезненный способ.
22 сентября 2025
Ускоряем поиск с использованием LIKE
Прислали мне SQL-запрос с жалобой, что при определенных параметрах он работает около 10 минут. Хотя в большинстве случаев возвращает данные быстрее, чем за секунду. Запрос не простой. В нем объединяется несколько таблиц и вьюшек, а среди всех условий – регистронезависимый поиск по вхождению строки: UPPER(поле) LIKE '%СТРОКА%'. Мои замечания по поводу UPPER и LIKE по вхождению, так же как и предложения изменить запрос или использовать полнотекстовый поиск не приняли, т.к. запрос создан генератором запросов и переписывать его никто не будет. Проблему усугублял планировщик запросов PostgreSQL. Судя по плану, когда запрос возвращал данные, LIKE выполнялся по уже отфильтрованным данным и проверял несколько десятков строк, и время выполнения было приемлемое. А с параметрами при которых результат запроса был пустой, LIKE выполнялся первым условием и перебирал все строки в таблице. Как результат – жуткие тормоза. Это поведение моделировалось на PostgreSQL с 12-й версии по 17-ю. На MS SQL Server план этого запроса составлялся всегда корректно.
11 февраля 2025
Как PostgreSQL под Linux может тормозить запросы
06 июня 2024
Преобразование JSON-строки в тип дата/время используя SQL
Согласно стандарту ECMA-404. The JSON Data Interchange Syntax в JSON нет типа для хранения даты и времени. В каком виде они будут закодированы в каждом конкретном JSON-файле определяет его автор. Я встречал два варианта:
- Целое число содержащее UNIX-время (UNIX-time или POSIX-time), которое используется в UNIX и других POSIX-совместимых операционных системах, и определяет количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года.
- Строка. Формат строки зависит от фантазии автора файла, но обычно используется стандарт ISO 8601, который представляет дату и время в универсальном формате, легко читаемом как людьми, так и машинами.
20 марта 2024
Задержка выполнения запроса в PostgreSQL
29 февраля 2024
Уникальные индексы и NULL
12 июня 2023
Сколько строк обработал оператор DML?
17 апреля 2023
Конвертация данных при изменении типа столбца таблицы PostgreSQL
04 апреля 2023
PostgreSQL. Корректировка следующего значения полей SMALLSERIAL, SERIAL и BIGSERIAL
20 декабря 2022
Вызов процедур, функций и других SQL-команд PostgreSQL из базы данных Oracle
- можно выполнять только команды DML (SELECT, INSERT, UPDATE и DELETE);
- синтаксис команд должен быть эквивалентным синтаксису СУБД Oracle;
- нельзя из удаленной базы данных вызвать процедуры и функции.
15 ноября 2022
Установка и настройка Oracle Database Gateway на компьютере без СУБД Oracle
08 ноября 2022
Работа с информацией в базе данных PostgreSQL через базу данных Oracle
21 октября 2021
FireDAC vs UniDAC. Получение значения первичного ключа новой строки
15 апреля 2021
Сортировка по текстовому полю содержащему комбинацию букв и цифр
- либо слово X является началом слова Y (например, "МАТЕМАТИК" < "МАТЕМАТИКА");
- либо первые m символов этих слов совпадают, а m+1-й символ слова X меньше m+1-го символа слова Y (например, "АБАК" < "АБРАКАДАБРА", так как первые две буквы у этих слов совпадают, а третья буква у первого слова меньше, чем у второго).
| Лексикографический порядок | Естественный порядок |
| a12 | a2a |
| a22 | a2b |
| a2a | a3a2 |
| a2b | a3a2a |
| a30z | a12 |
| a3a2 | a22 |
| a3a2a | a30z |
07 апреля 2020
PostgreSQL и ошибка "столбец pd.adsrc не существует"
19 февраля 2020
Обмен сообщениями между базой данных и программой
16 января 2020
Удаление дубликатов строк SQL запросом
28 октября 2019
Delphi & PostgreSQL. Фиксим "character with byte sequence 0xcc 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1251""
25.10.2019 10:01:24.523 Thread #5: character with byte sequence 0xcc 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1251"Первой мыслью было, что Elasticsearch не принял данные, которые я ему передал REST-запросом. Но запустив программу под отладкой я получил эту ошибку при открытии запроса к БД PostgreSQL:
Project XYZ.exe raised exception class EPgError with message 'character with byte sequence 0xcc 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1251"'Посмотрев в БД данные, я сначала из-за у-умлаут грешил на слово "Zürich". Но сохранив текст в двух вариантах в файл (UTF8 и ANSI) и сравнив их, я увидел, что разница была в "Дадаи́зм" и "Дадаи?зм". Таким образом врагом WIN1251 объявляю букву "и" с ударением!
Враг назначен, т.е. найден, теперь будем решать, что с ним делать.
