Перейти к содержанию

Lua-скрипты — особенности PG-совместимости

Найдено при деплое на dev-pg, 2026-03-01

SmartScripts на Lua работают на обеих СУБД. Используется get_mspg_query() с тегами {MS}...{/MS} и {PG}...{/PG}.

Известные проблемы

Проблема MSSQL PG Решение
[Column] quoting Работает Ошибка синтаксиса {MS}sc.[Key]{/MS}{PG}sc.key{/PG}
Ключи в результатах SQL:query_one / SQL:query Case сохраняется (Value) Всё lowercase (value) data['Value'] or data['value']

Backend при преобразовании результата DataTable в словарь использует case-insensitive доступ к ключам. Поэтому в большинстве runtime-сценариев обращения к полям результата по именам вроде Value/value больше не зависят от регистра. Однако в raw SQL, quoted identifiers и при явной работе со строковыми ключами различие MSSQL/PG по регистру по-прежнему нужно учитывать. | CACHE:set с nil | json_encode(nil)"null" | То же | Всегда проверять переменную перед кэшированием | | Стухший кэш | — | — | CACHE:get проверять на ~= nil и ~= 'null'. Нет API для ручного сброса — менять имя ключа или ждать TTL | | Таблицы без схемы dbo. | Работает (dbo — default schema) | 42P01: relation not found | Всегда dbo.TableName | | NULL в UNION ALL | Bare NULL → OK | 42804: UNION types text and bigint | CAST(NULL AS BIGINT) — кроссплатформенно | | Boolean vs integer колонки | = 1 везде OK | 42883: integer = boolean | Не все Is*/Allow*-колонки boolean на PG. Проверять data_type через information_schema.columns |

SmartScripts Admin API

  • GET существующего: GET /api/admin/smart/scripts/{scriptId}/editor
  • POST обновления: POST /api/admin/smart/scripts/editor (body: {script: SmartScriptDto, context: null})
  • НЕ ПУТАТЬ: GET /api/admin/smart/scripts/editor?id=... — создание нового (возвращает пустой DTO)