What Laurenz said.
But, quoting the manual:
To vacuum a table, one must ordinarily be the table's owner or a
superuser. However, database owners are allowed to vacuum all tables
in their databases, except shared catalogs. (The restriction for
shared catalogs means that a true database-wide
VACUUM can only be
performed by a superuser.)
VACUUM will skip over any tables that the
calling user does not have permission to vacuum.
Meaning, if you have issued
VACUUM FULL as superuser, shared objects may also be affected, and you need to dump and restore the whole cluster to be sure: (
pg_dumpall). (Typically, the lion's share of zombi-files would be located in the directory of the affected database, though.)
I thought of creating a new database based on the afflicted one as
TEMPLATE directly, which is much faster than a full dump/restore cycle. (Would require sufficient available storage, of course). Unfortunately, since that just copies physical files of a database, it would include the zombi-files you are trying to get rid of.
Remember that you need sufficient free space for a complete
pg_dump. The dump file can be bigger or smaller than the database itself. Since you have problems with available free storage, consider dumping to a different physical location.