A partir del lanzamiento de la versi�n 6.3, Postgres soporta la definici�n de lenguajes procedurales. En el caso de una funci�n o procedimiento definido en un lenguaje procedural, la base de datos no tiene un conocimiento impl�cito sobre como interpretar el c�digo fuente de las funciones. El manejador en s� es una funci�n de un lenguaje de programaci�n compilada en forma de objeto compartido, y cargado cuando es necesario.
Instalaci�n de lenguajes procedurales
Un lenguaje procedural se instala en la base de datos en tres pasos.
El objeto compartido que contienen el manejador del lenguaje ha de ser compilado e instalado. Por defecto, el manejador para PL/pgSQL est� integrado e instalado en el directorio de bibliotecas de la base de datos. Si el soporte de Tcl/Tk est� instalado y configurado, el manejador para PL/Tcl est� integrado e instalado en el mismo sitio.
La escritura de un nuevo lenguaje procedural (Procedural language, PL) est� mas all� del �mbito de este manual.
El manejador debe ser declarado mediante la orden
CREATE FUNCTION handler_function_name () RETURNS OPAQUE AS 'path-to-shared-object' LANGUAGE 'C'; |
El PL debe ser declarado con la orden
CREATE [ TRUSTED ] PROCEDURAL LANGUAGE 'language-name' HANDLER handler_function_name LANCOMPILER 'description'; |
Ejemplo
La siguiente orden le dice a la base de datos donde encontrar el objeto compartido para el manejador de funciones que llama al lenguaje PL/pgSQL
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C'; |
La orden
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'; |
define que la funci�n manejadora de llamadas previamente declarada debe ser invocada por las funciones y procedimientos disparadores cuando el atributo del lenguaje es 'plpgsql'
Las funciones manejadoras de PL tienen una interfase de llamadas especial distinta del de las funciones de lenguaje C normales. Uno de los argumentos dados al manejador es el identificador del objeto en las entradas de la tabla pg_proc para la funci�n que ha de ser ejecutada. El manejador examina varios cat�logos de sistema para analizar los argumentos de llamada de la funci�n y los tipos de dato que devuelve. El texto fuente del cuerpo de la funci�n se encuentra en el atributo prosrc de pg_proc. Debido a esto, en contraste con las funciones de lenguaje C, las funciones PL pueden ser sobrecargadas, como las funciones del lenguaje SQL. Puede haber m�ltiples funciones PL con el mismo nombre de funci�n, siempre que los argumentos de llamada sean distintos.
Los lenguajes procedurales definidos en la base de datos template1 se definen autom�ticamente en todas las bases de datos creadas subsecuentemente. As� que el administrador de la base de datos puede decidir que lenguajes est�n definidos por defecto.