To do this by hand in QGIS, go to
Settings|Project Properties... On the
General tab at the bottom is
Snapping options... Check the layer that you want to snap, set the mode to
to vertex and set the tolerance to some value less than the shortest distance between two points that you have. If you're not sure, set the units to
pixels and the tolerance to something like 5 so that if there are some fiddly details you can zoom right in and be sure that you don't snap to the wrong vertex.
Then edit your vector layer, select the node tool, and move the errant points to their counterparts.
Doing it automatically is a bit trickier. AFAIK QGIS doesn't have a plugin to automate it, and although PostGIS is built on GEOS which does have snapping functions, they're not exposed to PostGIS. It might be possible to write a query to check each point of a polygon for neighbours within the snapping distance, but that is currently beyond my wit to expand upon.
GRASS has v.clean.snap which you can access via QGIS, but there's the extra step of creating a GRASS dataset.