Antes de hablar del lenguaje en sí, hay que dar crédito al autor del lenguaje: Jan Wieck.
Las metas del diseño de PL/pgSQL como lenguaje procedural son:
El manejador de PL/pgSQL analiza el código fuente de las funciones y
produce un árbol de instrucciones en código binario interno la primera
vez que es llamado por el DBMS. El código binario producido es
identificado dentro del manejador por el OID
de la
función. Esto garantiza que al cambiar la función con una secuencia
DROP/CREATE
10.1, el cambio tendrá efecto sin necesidad de
realizar una nueva conexión al servidor.
Para todas las expresiones y secuencias SQL utilizadas en la función,
el intérprete de código PL/pgSQL binario crea y prepara un plan de
ejecución usando los controladores SPI
10.2 SPI_prepare()
y SPI_saveplan()
. Esto
se hace la primera vez que cada secuencia individual es procesada en
la función PL/pgSQL. Así, una función con código condicional que
contiene varias secuencias para las cuales un plan de ejecución será
requerido, sólo prepararán y salvarán aquellos planes que realmente
serán utilizados durante la vida de la conexión al DBMS.
Incluso es posible crear funciones de cómputo condicional complejo y utilizarlas posteriormente para definir operadores o utilizarlas en índices funcionales. Sin embargo, para conversiones de entrada o salida o cálculos sobre tipos de datos definidos por el usuario, no es posible realizarlos en PL/pgSQL.