The usage of unioning functions is similar to other spatial aggregate functions. The first possibility is to supply two geometries. For example, let's pick two town boundaries and simulate the administrative boundary if they were merged:
SELECT ST_Union(
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828737'),
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828740')
);
The resulting polygon has no boundary between neighboring towns:

Two polygons about to be merged

The result of merging
Now we will add two more towns to the stack, using the second possible syntax: providing an array of geometries as an argument:
SELECT ST_Union(
ARRAY[
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828737'),
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828740'),
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828739'),
(SELECT wkb_geometry FROM multipolygons WHERE osm_id = '2828738')
]
);
Finally, let's try to merge all boundaries into one big polygon:
SELECT ST_Union(wkb_geometry) FROM multipolygons WHERE boundary='administrative';