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