plpgsql_check - Модуль расширенной проверки plpgsql
Это расширение представляет собой полный линтер для plpgsql в QHB.
Он использует только внутренний синтаксический анализатор/оценщик QHB,
поэтому обеспечивает видимость того, какие ошибки могут возникнуть во время выполнения.
Кроме того, он анализирует SQL внутри подпрограмм и находит ошибки, которые обычно
не обнаруживаются при выполнении команды CREATE PROCEDURE/FUNCTION
. Модуль позволяет
контролировать уровни многих предупреждений и подсказок. Предоставляется возможность
добавить маркеры типа PRAGAMA для включения/выключения многих аспектов, что позволяет
скрыть сообщения, о которых уже известно, или обеспечить возможность для возврата к
более глубокой очистке позже.
Установка
Модуль расширенной проверки plpgsql для QHB поставляется в виде пакета qhb-1.5.1-plpgsql-check.
Подключите репозиторий пакетов QHB и установите пакет расширения для выбранной платформы со страницы загрузки.
Функции
- проверяет поля ссылочных объектов базы данных и типов внутри встроенного SQL;
- подтверждает, что используются правильные типы для параметров функции;
- идентифицирует неиспользуемые переменные и аргументы функций, немодифицированные аргументы OUT;
- частичное обнаружение мертвого кода (код после команды RETURN);
- обнаружение отсутствия команды RETURN в функции (часто после обработчиков исключений, сложная логика);
- пытается идентифицировать нежелательные скрытые приведения, которые могут быть проблемой производительности, например неиспользуемые индексы;
- возможность собирать отношения и функции, используемые функцией;
- возможность проверки операторов EXECUTE на уязвимость SQL-инъекций.
Поддерживаются версии QHB 1.5.1 и выше.
Параметры
Установить уровень предупреждений можно через параметры функции.
Обязательный параметр
funcoid oid - имя функции или сигнатура функции - для функций требуется спецификация
функции. Любую функцию в QHB можно указать по Oid, по имени
или по подписи. Когда известен oid или полная сигнатура функции, можно использовать
параметр типа regprocedure, такой как 'fx()'::regprocedure
или 16799::regprocedure
.
Возможная альтернатива — использовать только имя, когда имя функции уникально, например
'fx'. Когда имя не уникально или функция не существует, возникает ошибка.
Необязательные параметры
relid (по умолчанию 0) - oid отношения, которому назначена триггерная функция. Необходимо проверить любую триггерную функцию. Для проверки таблицы, в которой работает триггер.
fatal_errors (boolean) (по умолчанию true) - останавливает проверки при первой ошибке (предотвращает массовые сообщения об ошибках).
other_warnings (boolean) (по умолчанию true) - показывает предупреждения, такие как разное количество атрибутов в назначение слева и справа, переменные перекрывают параметр функции, неиспользуемые переменные, нежелательное приведение и т. д.
extra_warnings (boolean) (по умолчанию true) - показывает предупреждения, такие как отсутствующие RETURN, затененные переменные, мертвый код, никогда не читаемый (неиспользуемый) параметр функции, немодифицированные переменные, измененные автоматические переменные и т. д.
performance_warnings (boolean) (по умолчанию false) - предупреждения, связанные с производительностью, такие как объявленный тип с модификатором типа, приведение, неявное приведение в предложении where (может быть причиной, по которой индекс не используется) и т. д.
security_warnings (boolean) (по умолчанию false) - проверки, связанные с безопасностью, такие как обнаружение уязвимостей SQL-инъекций.
compatibility_warnings (boolean) (по умолчанию false) - проверки, связанные с совместимостью, такие как устаревшие явные установки внутренних имен курсоров в refcursor или переменные курсора.
anyelementtype regtype (по умолчанию int) - фактический тип, который будет использоваться при тестировании типа любого элемента.
anyenumtype regtype (по умолчанию '-') - фактический тип, который будет использоваться при тестировании типа anyenum.
anyrangetype regtype (по умолчанию int4range) - фактический тип, который будет использоваться при тестировании типа anyrange.
anycompatibletype (по умолчанию int) - фактический тип, который будет использоваться при тестировании любого совместимого типа.
anycompatiblerangetype (по умолчанию int4range) - фактический тип диапазона, который будет использоваться при тестировании любого совместимого типа диапазона.
without_warnings (по умолчанию false) - отключить все предупреждения (игнорирует все параметры xxxx_warning, быстрое переопределение).
all_warnings (по умолчанию false) - включить все предупреждения (игнорирует другие параметры xxx_warning, быстрое срабатывание).
newtable (по умолчанию NULL), oldtable (по умолчанию NULL) - имена НОВЫХ или СТАРЫХ таблиц переходов. Эти параметры необходимы, когда таблицы переходов используются в триггерных функциях.
use_incomment_options (по умолчанию true) - когда это правда, то опции в комментариях активны.
incomment_options_usage_warning (по умолчанию false) - если значение true, то возникает предупреждение при использовании опции в комментарии.
Список зависимостей
Функция plpgsql_show_dependency_tb покажет все функции, операторы и отношения, используемые внутри обрабатываемой функции:
qhb=# select * from plpgsql_show_dependency_tb('testfunc(int,float)');
┌──────────┬───────┬────────┬─────────┬────────────────────────────┐
│ type │ oid │ schema │ name │ params │
╞══════════╪═══════╪════════╪═════════╪════════════════════════════╡
│ FUNCTION │ 36008 │ public │ myfunc1 │ (integer,double precision) │
│ FUNCTION │ 35999 │ public │ myfunc2 │ (integer,double precision) │
│ OPERATOR │ 36007 │ public │ ** │ (integer,integer) │
│ RELATION │ 36005 │ public │ myview │ │
│ RELATION │ 36002 │ public │ mytable │ │
└──────────┴───────┴────────┴─────────┴────────────────────────────┘
(4 rows)
Необязательными аргументами plpgsql_show_dependency_tb являются relid, anyelementtype, enumtype, anyrangetype, anycompatibletype и anycompatiblerangetype.
Лицензия
Copyright (c) Павел Стехуле ( pavel.stehule@gmail.com )
Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), работать с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, слияние. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:
Приведенное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ГАРАНТИИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕ НАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИМ ПРАВОМ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДУТ СВЯЗАННЫЕ С ДОГОВОРОМ, ДЕЛОМ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ИЗ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИСПОЛЬЗОВАНИЯ, ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ, ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.