API
Для запуска анализа плана необходимо отправить POST-запрос на /explain с телом плана и дополнительными
параметрами вызова в виде JSON-объекта.

Пример для вызова с помощью CURL:
 
curl -X POST https://explain.tensor.ru/explain \ -H "Content-Type: application/json" \ -d @FILENAME
тут FILENAME – путь к файлу, содержащему параметры вызова в виде JSON-объекта Формат ответа Результат положительной обработки возвращается с кодом HTTP 302. В заголовке Location возвращается URL страницы визуализации переданного плана, включающий его uuid: /archive/explain/42453282d5fc9c05d637372d3851165d:0:2021-08-03 Параметры запроса
обязательные
plan string план в формате text/JSON/YAML единой строкой
необязательные
name string имя плана в архиве
private boolean план виден только в персональном архиве, default:false
ассоциированный запрос
query string текст cвязанного запроса
params string $n-параметры единой строкой
дерево планов
group UUID(string) ID корневого плана группы
parent UUID(string) ID плана-предка
Примеры вызовов
простой план
{ "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)" }
именованный план
{ "name" : "Plan-name", "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)" }
ассоциированный запрос
{ "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)", "query" : "SELECT * FROM pg_class WHERE oid = 'pg_class'::regclass" }
параметризованный запрос
{ "plan" : "Bitmap Heap Scan on pg_class (cost=503.84..1720.79 rows=4781 width=265)\n Recheck Cond: (relnamespace ='99'::oid)\n Filter: (relowner = '10'::oid)\n -> Bitmap Index Scan on pg_class_relname_nsp_index (cost=0.00..502.64 rows=4781 width=0)\n Index Cond: (relnamespace = '99'::oid)", "query" : "SELECT * FROM pg_class WHERE relnamespace = $1 and relowner = $2", "params" : "$1=100,$2=10" }
добавление в дерево
{ "name" : "Plan-name1", "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)", "query" : "SELECT * FROM pg_class", } -> UUID:8cf81ae6-0ccf-fe5f-b0e7-529b5b1e4328
{ "name" : "Plan-name2", "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)", "query" : "SELECT * FROM pg_class", "group" : "8cf81ae6-0ccf-fe5f-b0e7-529b5b1e4328", "parent": "8cf81ae6-0ccf-fe5f-b0e7-529b5b1e4328" } -> UUID: 12345ae6-0ccf-fe5f-b0e7-529b5b1e4328"
{ "name" : "Plan-name3", "plan" : "Index Scan using pg_class_oid_index on pg_class\n Index Cond: (oid = '1259'::oid)", "query" : "SELECT * FROM pg_class", "group" : "8cf81ae6-0ccf-fe5f-b0e7-529b5b1e4328", "parent": "12345ae6-0ccf-fe5f-b0e7-529b5b1e4328" } -> UUID: 98765ae6-0ccf-fe5f-b0e7-529b5b1e4328"