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 )

Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), работать с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, слияние. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:

Приведенное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ГАРАНТИИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕ НАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИМ ПРАВОМ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДУТ СВЯЗАННЫЕ С ДОГОВОРОМ, ДЕЛОМ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ИЗ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИСПОЛЬЗОВАНИЯ, ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ, ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.

См. также