After googleing a bit, it's plainly clear you cannot run vacuum from a function:
You can't run VACUUM from inside a function because of memory-management limitations. In current sources there is an error check to prevent you from trying.
Once the data is loaded, I would like to "vacuum analyze" the affected tables, both to recover the space from the deleted records and to accurately reflect the new contents. [...] When I run this, I get:
ERROR: VACUUM cannot be executed from a function or multi-command string
But I really need to "automatically" run vacuum whenever a certain function is run: this function updates a lot of records (if not all of them) so the number of dead rows increases quite fast and other query performance decrease a lot. The problem is the function is called from another program. Any best practice? Should I manually add the vacuum statement into a separeted piece of code after the function execution, someting like
sql = SELECT my_function()
sql = VACUUM [FULL | ANALYZE] my_updated_table