Ah, que lo que querías pasar era el nombre de una tabla. No se puede realizar tal y como lo haces tú.
Si lo que quieres es realizar consultas dinámicas necesitas usar el comando EXECUTE:
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION str(text)
RETURNS text AS
$BODY$
/*Devuelve */
DECLARE
car text;
BEGIN
EXECUTE 'select text from ' || $1
INTO car;
RETURN car;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT
COST 100;
ALTER FUNCTION str(text) OWNER TO postgres;
No puedes usar el SELECT INTO con EXECUTE, en su defecto, debes usar la construcción EXECUTE ... INTO.
Además, ten en cuenta que en la variable car solo se va a guardar el valor del campo text de la primera fila de resultados (porque esa consulta normalmente devolverá más de una fila de resultados).
Te dejo un link de la documentación oficial sobre la sentencia EXECUTE:
http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html