PostgreSQL е много разширим и можете например да дефинирате свой собствен процедурен език, на който да пишете функции.
PostgreSQL не знае нищо за езика, освен че трябва да извика определен езиков манипулатор за изпълнение на функцията.
Начинът, който беше избран за прилагане на това, е да се опрости предаването на кода като низ.
Това е само детайл на изпълнението и не прави функциите на PostgreSQL повече или по-малко уязвими за SQL инжектиране в сравнение с други RDBMS.
Има няколко нива, на които трябва да се защитите срещу инжектиране:
-
Аргументите на функцията:Тук трябва да избирате ненизови типове данни, когато е възможно.
-
SQL операторите във функцията:Тук трябва да избягвате динамичен SQL, когато е възможно, и ако трябва да използвате динамичен SQL, трябва да вмъкнете променливи, като използвате
%L
модел наformat
функция.
Отново, това е същото, ако телата на функциите са посочени като низове или не.