2B: Поддержка решений 1С

Поддерживается платформа «1С:Предприятие», начиная с версии 8.3.18.

Дополнительные типы данных для совместимости с Microsoft SQL Server

В версии QHB 1.2.0 были добавлены типы данных mchar и mvarchar, являющиеся аналогами типов char и varchar, но имеющие ряд особенностей поведения, повторяющих поведение типов nchar и nvarchar в Microsoft SQL Server.

Отличия от стандартных типов char и varchar в QHB:

  • Сравнение без учета регистра, в том числе если один из аргументов mchar/mvarchar, а второй нет (для сравнения с учетом регистра вводятся специальные версии операторов сравнения: &<, &<=, &=, &>= и &>).

  • Тип mchar фиксированной длины дополняется пробелами справа, но при сравнениях эти пробелы игнорируются.

  • Данные типа mchar/mvarchar хранятся в кодировке utf-16 (для пользователя это не важно).

  • Для сравнения и приведения к верхнему/нижнему регистру используется ICU, поэтому результат не зависит от операционной системы.

  • Функция получения подстроки substr(str, pos [, length]), а не substring.

Отличия от поведения nchar и nvarchar в Microsoft SQL Server:

  • Типы mchar и mvarchar без указания длины трактуются как строки неопределенной неограниченной длины (похоже на nvarchar(max)); mchar неопределенной длины не дополняется пробелами справа (но явно заданные пробелы все-таки хранятся).

  • Функция вычисления длины строки length(string), а не len, как в Microsoft SQL Server.

Для типов данных mchar и mvarchar поддерживаются индексы B-деревья и хеш-индексы.


fulleq — дополнительный оператор равенства для совместимости с Microsoft SQL Server

Для совместимости с Microsoft SQL Server в версии QHB 1.2.0 был добавлен оператор fulleq (полное равенство) ==.

Оператор fulleq (==) отличается от обычного равенства (=) тем, что возвращает true при сравнении двух значений NULL (обычное равенство возвращает NULL согласно стандарту ANSI SQL). Такое поведение принято в СУБД семейства Microsoft SQL.

Оператор == определен для следующих типов данных:

  • bool
  • bytea
  • char
  • mchar
  • varchar
  • mvarchar
  • name
  • int2
  • int4
  • int8
  • int2vector
  • text
  • oid
  • xid
  • cid
  • oidvector
  • float4
  • float8
  • macaddr
  • inet
  • cidr
  • date
  • time
  • timestamp
  • timestamptz
  • interval
  • timetz

Быстрое опустошение временных таблиц

В QHB операция TRUNCATE транзакционная: ее можно откатить. Из-за этого она более затратна, чем в других СУБД.

В версии 1.2.0 была добавлена функция fasttruncate, которая очищает таблицу быстрее и предотвращает разрастание системного каталога pg_class. Пока ее можно применять только ко временным таблицам, благодаря чему очистка не вызывает конфликта с другими пользователями.

ВНИМАНИЕ!
Функция fasttruncate является внетранзакционной: при откате транзакции очистка таблицы не будет отменена!

Пример использования:

SELECT fasttruncate ('pg_temp.tmp3')

Немедленное обновление статистики отдельных таблиц

Для сильно меняющихся таблиц, например временных, стандартные средства сбора статистики могут быть неэффективны. В версии QHB 1.2.0 появилась возможность немедленного обновления статистики таблицы после ее изменения, т. н. немедленный анализ (online analyze).

Сбор статистики вызывается после фиксации транзакции, модифицировавшей таблицу, при выполнении определенных условий. Настройка этого поведения осуществляется с помощью соответствующих конфигурационных параметров в файле конфигурации qhb.conf (подробную информацию см. в подразделе Конфигурационные параметры немедленного обновления статистики).


Поддержка указаний для планировщика, позволяющих отключать или подключать определенные индексы при выполнении запроса

В версии QHB 1.2.0 были добавлены конфигурационные параметры для управления использованием индексов (подробную информацию см. в подразделе Конфигурационные параметры для управления использованием индексов). С их помощью можно просить планировщик не использовать определенные индексы. Если вы хотите, чтобы конкретный индекс использовался, этих параметров недостаточно, одновременно с ними нужно использовать параметр enable_seqscan и другие.

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