¿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:
LISTEN
yNOTIFY
para hablar con él.Con frecuencia, una vista es suficiente cuando cree que se necesita una función. Incluso si es extremadamente costoso para
SELECT
toda la vista, lasWHERE
clá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:
WHERE
Se necesitan parámetros que no se puedan expresar como cláusulas simples , como un parámetro dentro de unaWITH
expresiónSECURITY DEFINER
función, y lassecurity_barrier
vistas 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
STABLE
oIMMUTABLE
(y no también declaradasSTRICT
oSECURITY 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
CASE
declaraciones, 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:EXECUTE
declaraciónRAISE
errores / advertencias para los registros o el clienteEXCEPTION
bloques en lugar de hacer que toda la transacción finalice en caso de errorCASE ... WHEN
muy bienWITH
y CTECon expresiones de tabla comunes (CTE), especialmente CTE de escritura y
WITH RECURSIVE
encuentro 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
plpgsql
es un lenguaje procesal completo, con variables, construcciones en bucle, etc. UnaSQL
función es simplemente una subconsulta. Una función de SQL, si se declaraSTABLE
oIMMUTABLE
no también declaróSTRICT
, a menudo puede ser inline en la consulta de llamadas, como si estuviera escrito sobre cada referencia.fuente