Hola Julio, no me dió error al compilarla desde pgadmin,pero sí al ejecutarla
ERROR: no existe el rol «antonio»
CONTEXT: sentencia SQL: «ALTER ROLE Antonio WITH PASSWORD 'carmel'»
PL/pgSQL function "cambiar" line 3 at sentencia EXECUTE
La funcion me ha quedado así
Antonio es el superusuario, o sea que, y es propietario tambien de la BD desde la que ejecuto la
funcion.
Tiene todos los derechos de acceso
CREATE OR REPLACE FUNCTION cambiar(clave character varying)
RETURNS boolean AS
$BODY$
BEGIN
execute 'ALTER ROLE '||current_user||' WITH PASSWORD '''||clave||'''';
RETURN true;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
El 15 de septiembre de 2009 16:11, suso <jlcu...@terra.es
<mailto:jlcu...@terra.es>> escribió:
Hola de nuevo, tenngo esta función para intentar cambiar el pass del
usuario,pero me da error al intentar ejecutarla desde el mismo
pgadmin, está mal escrita..
El error me lo da en la línea del ALTER ROLE.
CREATE OR REPLACE FUNCTION cambiar(clave character varying)
RETURNS boolean AS
$BODY$
DECLARE
nombre varchar;
BEGIN
nombre = current_user;
ALTER ROLE nombre WITH PASSWORD clave;
RETURN true;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
He buscado info en el manual de postgres, en internet, y
"supuestamente" esta bien puesto, pero no es así, por qué, qué estoy
haciendo mal?.
Muchas gracias
Un saludo
Suso
Imagino que el error que te marca es que no encuentra el role nombre.
Para hacer esto tendrias que armar la sentencia del alter role con execute.
CREATE OR REPLACE FUNCTION cambiar(clave character varying)
RETURNS boolean AS
$BODY$
DECLARE
--nombre varchar;
BEGIN
--nombre = current_user;
execute 'ALTER ROLE '||current_user ||' WITH PASSWORD
'''||clave||'''';
RETURN true;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net