¿Alguien puede resumir las diferencias entre:
http://www.postgresql.org/docs/9.1/static/xfunc-sql.html
y
http://www.postgresql.org/docs/9.1/static/plpgsql.html
?
Puntos principales:
- diferencias conceptuales
- dado un problema familiar, conveniencia de uso
- problemas politicos
postgresql
stored-procedures
plpgsql
Gismo Ranas
fuente
fuente

Respuestas:
Las funciones PL / PgSQL y SQL simple son parte de un conjunto de herramientas más grande y deben verse en ese contexto. Tiendo a pensarlo en términos de una escala ascendente de potencia combinada con la complejidad y el costo ascendentes, donde debería usar la herramienta más simple que hará bien el trabajo:
LISTENyNOTIFYpara hablar con él.Con frecuencia, una vista es suficiente cuando cree que se necesita una función. Incluso si es extremadamente costoso para
SELECTtoda la vista, lasWHEREcláusulas en la consulta que hacen referencia a la vista generalmente se introducen en la vista y pueden generar planes de consulta muy diferentes. A menudo he tenido grandes mejoras de rendimiento al convertir funciones SQL en vistas.El momento principal en el que encuentra que no puede usar una vista y debe considerar una función SQL es cuando:
WHERESe necesitan parámetros que no se puedan expresar como cláusulas simples , como un parámetro dentro de unaWITHexpresiónSECURITY DEFINERfunción, y lassecurity_barriervistas en PostgreSQL 9.2 y superiores no son suficientes para sus necesidades;Para la mayoría de esas tareas, una función SQL simple funciona bien y, a menudo, es más fácil de leer que PL / PgSQL. Las funciones SQL declaradas
STABLEoIMMUTABLE(y no también declaradasSTRICToSECURITY DEFINER) también se pueden incluir en la instrucción de llamada. Eso elimina la sobrecarga de la llamada a la función y, a veces, también puede generar grandes beneficios de rendimiento cuando el optimizador empuja una condición WHERE en la función de llamada hacia la función SQL. Utilice las funciones de SQL siempre que sean suficientes para la tarea.El momento principal en que las funciones de SQL no harán el trabajo es cuando necesita mucha lógica. Si / luego / otras operaciones que no puede expresar como
CASEdeclaraciones, mucha reutilización de los resultados calculados, la creación de valores a partir de fragmentos, manejo de errores, etc. PL / PgSQL es útil entonces. Elija PL / PgSQL cuando no pueda usar las funciones de SQL o no encajen bien, como por ejemplo:EXECUTEdeclaraciónRAISEerrores / advertencias para los registros o el clienteEXCEPTIONbloques en lugar de hacer que toda la transacción finalice en caso de errorCASE ... WHENmuy bienWITHy CTECon expresiones de tabla comunes (CTE), especialmente CTE de escritura y
WITH RECURSIVEencuentro que uso PL / PgSQL mucho menos de lo que solía porque SQL es mucho más expresivo y poderoso. Utilizo vistas y funciones SQL simples mucho más ahora. Vale la pena recordar que las funciones SQL simples pueden contener más de una declaración; La última declaración es el resultado de la función.fuente
plpgsqles un lenguaje procesal completo, con variables, construcciones en bucle, etc. UnaSQLfunción es simplemente una subconsulta. Una función de SQL, si se declaraSTABLEoIMMUTABLEno también declaróSTRICT, a menudo puede ser inline en la consulta de llamadas, como si estuviera escrito sobre cada referencia.fuente