error al ejecutar disparador en postgre

error al ejecutar disparador en postgre

Hola comunidad soy nuevo con postgre y bueno leyendo la documentacion sobre disparadores pues hice el siguiente disparador,y procedimiento los cuales deseo que hagan es lo siguiente cada vez que ingrese o actualice un registro en la table usuario ,encripte la contrasena con la funcion encrypt bueno ahora coloco el codigo que he realizado:

CREATE OR REPLACE FUNCTION encriptar() RETURNS TRIGGER AS $encriptacion$
DECLARE
BEGIN

NEW.contrasena := encrypt(NEW.contrasena,'prueba');

RETURN NEW;
END;
$encriptacion$ LANGUAGE plpgsql;

a claro que ya instale las funciones que vienen en el archivo pgcrypto.sql para cargar las utilidades de postgre y ya instale el plpgsql.
el error que me marca es que me dice que no encuentra la funcion encrypt este es el msj

ERROR: no existe la función encrypt(character varying, unknown)
SQL state: 42883
Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
Context: PL/pgSQL function "encriptar" line 4 at asignación

Gracias por la ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de rafaelma

Re: error al ejecutar disparador en postgre


ERROR: no existe la función encrypt(character varying, unknown) SQL state: 42883
Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
Context: PL/pgSQL function "encriptar" line 4 at asignación

El problema es que no existe la funcion encrypt() como la estas usando. De todas formas no recomiendan este método en las páginas de pgcrypto.

Usa por ejemplo esto para crear el hash de tu clave:

 encode(digest(NEW.contrasena,'sha1'),'hex')

Tienes bastantes tipos de algoritmos disponibles. Los disponibles por defecto son: md5, sha1, sha224, sha256, sha384 and sha512.

Más información en:

http://www.postgresql.org/docs/current/interactive/pgcrypto.html
http://www.postgresql.org/docs/current/interactive/pgcrypto.html#PGCRYPT...

--
Rafael Martinez
PostgreSQL-es.org

Imagen de genosuke

gracias(post resuelto)

gracias funciona perfectamente pero porque no recomienda usar encrypt supuestamente esla funcion mas segura no ?

Enviar nuevo comentario

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><h2><pre>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

Image CAPTCHA
Enter the characters shown in the image.