"Eamonn Kent" <ekent(at)xsigo(dot)com> writes:
> I am using PostgreSQL 8.1.4 for an embedded application. For some
> reason, vacuum is not able to identify rows that are candidates for
> removal (i.e., mark space as available).
> ...
> We run auto vacuum and I can see from the logs that it is running quite
> frequently. When I run vacuum full from the psql, I can see that space
> is not being recovered. I have run vacuum full with the verbose flag
> set, I can see that messages that indicate the existence of "dead row
> versions that cannot be removed yet.
This means you've got an open transaction somewhere that could
potentially still be able to see those rows. Look around for
applications sitting "idle in transaction".
regards, tom lane