Совместимость с PostgreSQL
Tengri — это аналитическая СУБД с Постгрес-подобным диалектом SQL. Tengri основан на протоколах и грамматике PostgreSQL, но использует собственную реализацию. Для BI- и ETL-инструментов Tengri выглядит так, как если бы это был PostgreSQL.
Ключевой функционал Tengri как аналитической СУБД включает:
SQL и клиентский протокол
Диалект SQL и клиентский протокол Tengri наследует подмножество диалекта и клиентского протокола PostgreSQL, дополняя их новыми конструкциями. Это позволяет использовать с Tengri клиентские библиотеки от PostgreSQL и привычные подходы к написанию SQL для тех, кто до этого работал с Постгресом.
За счет этого мы обеспечиваем работу таких популярных клиентов, как DBeaver и Superset, библиотек sqlalchemy и psycopg, подключение к Tengri из Excel и прочее. Для клиентских приложений Tengri выглядит как Постгрес. Однако мы тестируем не все клиенты Постгреса на совместимость с Tengri. И мы не стремимся полностью покрывать все особенности PostgreSQL. Ниже приведена таблица с основными поддерживаемыми и не поддерживаемыми компонентами.
| Поддерживаем | Не поддерживаем | |
|---|---|---|
|
|
|
|
Клиенту отправляется минимальный неизменяемый набор настроек, достаточных для нормального функционирования большинства клиентов:
|
Все настройки, полученные от клиента при открытии соединения, игнорируются |
|
|
|
|
В части названий схем, таблиц, типов и атрибутов и части дополнительных полей реализованы системные таблицы:
Этого достаточно для работы большинства клиентов. |
Остальные таблицы |
Поддерживаемые приложения
Этого уровня совместимости достаточно для работы поддерживаемых клиентских приложений (DBeaver, Superset) или разрабатываемого вами решения на основе библиотек libpq, psqlodbc или pgJDBC. Однако этого может оказаться недостаточно для работы необходимого вам приложения, использующего эти библиотеки, но делающего запросы с неподдерживаемыми конструкциями языка или к неподдерживаемым системным таблицам.
Для особенных клиентских приложений, которые завязаны на специфику Постгреса (DDL, индексы и прочее), пишется своя реализация, специфичная для Tengri. Например, у нас есть плагин для популярного инструмента преобразования данных dbt.
| Поддержка | Комментарий | |
|---|---|---|
psql |
Нативная для Постгреса |
libpq |
DBeaver |
Нативная для Постгреса |
JDBC |
Superset |
Нативная для Постгреса |
sqlalchemy + psycopg |
Power Query (Excel) |
Нативная для Постгреса |
odbc |
dbt |
Плагин Tengri |
Собственная реализация |
Транзакции
В Tengri все запросы выполняются в режиме autocommit независимо от настроек соединения и сессионных настроек. Tengri гарантирует транзакционную целостность данных и атомарность DML-операций. Режимы изоляции транзакций PostgreSQL в режиме autocommit вырождаются в один и не могут быть изменены с помощью SQL.
Для случаев, когда режима autocommit недостаточно и нужны многошаговые транзакции, они реализуются стандартным PostgreSQL-синтаксисом BEGIN/START TRANSATION, COMMIT и ROLLBACK, дополняющим стандартные механики Iceberg сквозной эксклюзивной блокировкой затронутых объектов. (В настоящий момент в стадии тестирования.)
Тестирование совместимости
Тестирование жизненно важно для разработки такой сложной системы, как СУБД. Мы уделяем большое внимание тщательному и регулярному тестированию совместимости Tengri:
-
Мы поддерживаем набор unit-тестов и запускаем их на каждом изменении. Они покрывают отдельно конструкции языка, запросы из общедоступных тест-кейсов TPC-H и TPC-DS и наборы актуальных запросов для поддерживаемых клиентских приложений, которые мы регулярно обновляем.
-
Мы используем SQLsmith для генерации случайных запросов. Это позволяет нам быть уверенными в корректности работы оптимизатора и совместимости с PostgreSQL в части запросов
SELECT. -
Мы поддерживаем набор тестов с данными, чтобы быть уверенными в корректности результатов запросов в целом.