Funciones en PostgreSql

La sintaxis para crear funciones en PostgreSql es:
[sql]
CREATE OR REPLACE FUNCTION
functionName(parameter1 type1, parameter2 type2, … parameterN typeN)
RETURNS
returnType
AS
$$
BEGIN
# Code Here
END;
$$
LANGUAGE
plpgsql;
[/sql]

Donde:
functionName es el nombre de la función.
parameter1 a parameterN es el nombre del parámetro.
type1 a typeN es el tipo de dato del parámetro.
returnType es el tipo de dato que regresa la función.
$$ son delimitadores, el código tiene que ir encerrado en estos caracteres.
BEGIN y END inician y terminan el bloque de código de la función.
LANGUAGE plpgsql indica que el lenguaje utilizado es Procedure Language, de PostgreSql.
El lenguaje puede ser SQL también. Si este es el caso, cambia la forma de utilizar los parámetros.

Comencemos creando una función que regrese un entero con la fecha en formato Unix Time, sin parámetros.

[sql]
CREATE OR REPLACE FUNCTION
unixtime()
RETURNS
integer
AS
$$
BEGIN
RETURN
EXTRACT(
epoch FROM now() AT TIME ZONE ‘utc’
)::int;
END;
$$
LANGUAGE
plpgsql;
[/sql]

Donde:
unixtime es el nombre de la función.
No tenemos parámetros.
integer es el tipo de dato que regresa la función.

Segundo ejemplo, la misma función que con un parámetro en el que podamos establecer una fecha particular, y en caso de que no la establezcamos, nos devuelva el unixtime para la fecha actual:

[sql]
CREATE OR REPLACE FUNCTION
unixtime(p_date timestamp DEFAULT now())
RETURNS
integer
AS
$$
BEGIN
RETURN
EXTRACT(
epoch FROM p_date AT TIME ZONE ‘utc’
)::int;

END;
$$
LANGUAGE
plpgsql;
[/sql]

Como podemos ver, el parámetro es “p_date” y en caso de que no exista, tomamos el la fecha actual con “now()”. Se utilizaría de esta forma:

[sql]
— El unixtime, con fecha preestablecida y sin ella
SELECT unixtime(‘2016-01-01 14:01:01’), unixtime();
[/sql]

Excelente! Ahora vamos a crear una función para devolver una cadena encriptada con el algoritmo SHA1.
**Nota**Si no tienes instalado el módulo pgcrypt, instalalo con el comando:

[sql]
CREATE EXTENSION pgcrypto;
[/sql]

Ahora codificamos la función:

[sql]
CREATE OR REPLACE FUNCTION
sha1(bytea)
RETURNS
text
AS
$$
SELECT encode(digest($1, ‘sha1’), ‘hex’)
$$
LANGUAGE
SQL STRICT IMMUTABLE;
[/sql]

El lenguaje es SQL, STRICT es para que regrese null si el argumento es null e IMMUTABLE para indicarle que no accederá a datos, que solo utilizará los parámetros datos.
Como podemos observar, el parámetro utilizado no tiene nombre, solo el tipo, y lo utilizamos con denotación ordinal $1, es decir el primer argumento.

Related Posts

Respaldando y restaurando bases de datos en PostgreSQL

admin

March 24, 2016

Postgresql

No Comment

**IMPORTANTE** Los comandos son efectuados desde la terminal. **IMPORTANTE** Para utilizar pg_dump y psql tienes que estar “loggeado” con un usuario que tenga acceso a PostgreSql, por esta razón en los comandos no enviamos información de autenticación. **IMPORTANTE** Al restaurar un script en formato sql con priviegios a usuarios en otro servidor, los usuarios deben […]

Read More

Agregar un usuario en PostgreSQL

admin

March 23, 2016

Postgresql

No Comment

Paso 1: Crear un usuario en linux: $ adduser luis $ passwd luis Paso 2: Personificar al usuario postgres y entrar a la base de datos template1 $ su postgres $ psql -d template1 Paso 3: Crear el usuario en postgres (Se debe de llamar igual que el usuario de linux) postgres=# CREATE USER luis […]

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *