si se puede.
Puedes utilizar esta función
Código sql:
Ver originalCREATE OR REPLACE FUNCTION consultar_con_where(parametro_where text)
RETURNS SETOF tabla_prueba AS
$BODY$
DECLARE
fila tabla_prueba%rowtype;
SQL text;
BEGIN
SQL = 'select id,nombre FROM tabla_prueba ' || parametro_where;
FOR fila IN EXECUTE SQL
LOOP
RETURN NEXT fila;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Para el caso lo hago con una tabla llamada tabla_prueba
Código sql:
Ver originalpruebas=> SELECT *FROM consultar_con_where('');
id | nombre
----+---------
1 | daniel
2 | sara
3 | natalia
(3 filas)
pruebas=> SELECT *FROM consultar_con_where('where id=1');
id | nombre
----+--------
1 | daniel
(1 fila)
pruebas=>
saludos