The first issue is that you are using latitude-longitude coordinates, while they should be expressed as longitude-latitude. If you swap them, you will get the proper result.
The second issue is that
st_distance applied on geometries returns a distance using the underlying coordinate system unit. The coordinates are in degrees... so the length is also in degrees, and it doesn't make sense (the length - in meters - of a degree of latitude is not the same as a degree of longitude). In the comments, you transform the geometries to CRS 24310, whose unit is in yards.
Swapping the lat-long to long-lat and converting yards to meters, you get a distance of 215m.
Alternatively, you can do as @ThingumaBob has suggested, i.e. to cast to geography first (but you still need to swap the lat-long to long-lat)
WITH a AS (select st_makepoint(74.3782182429078,31.54696470032501) geom),
b AS (select st_makepoint(74.37833017871426,31.548894670525055) geom)
select st_distance( st_transform(st_setsrid(a.geom,4326),24370),
) * 0.9144 as d_trans,
ST_Distance(a.geom::geography, b.geom::geography) d_geog
d_trans | d_geog
215.90051305541 | 214.25682418