PostgreSQL es altamente extensible y, por ejemplo, puede definir su propio lenguaje de procedimiento para escribir funciones.
PostgreSQL no sabe nada sobre el idioma, excepto que tiene que llamar a un determinado controlador de idioma para ejecutar la función.
La forma que se eligió para implementar esto es simplificar pasar el código como una cadena.
Esto es solo un detalle de implementación y no hace que las funciones de PostgreSQL sean más o menos vulnerables a la inyección SQL que otros RDBMS.
Hay varios niveles en los que tienes que defenderte de las inyecciones:
-
Los argumentos de la función:aquí debe elegir tipos de datos que no sean cadenas siempre que sea posible.
-
Las instrucciones SQL dentro de la función:aquí debe evitar SQL dinámico siempre que sea posible, y si tiene que usar SQL dinámico, debe insertar variables usando el
%L
patrón delformat
función.
Nuevamente, esto es lo mismo si los cuerpos de las funciones se especifican como cadenas o no.