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

Responder a