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)