So, I needed to create linear objects from point objects.
I split the objects into points with the following query:
CREATE TABLE roads_arc_var3 AS SELECT (ST_DumpPoints(geom)).geom FROM roads_arc_var1;I created the following table, so that it created two identical fields with the same values of coordinates:
CREATE TABLE roads_arc_var4 AS SELECT a.geom AS a, b.geom AS b FROM roads_arc_var3 AS a, roads_arc_var3 AS b WHERE a.geom = b.geomI added the field "geoline" to the table:
SELECT AddGeometryColumn('roads_arc_var4', 'geoline', 4326, 'LINESTRING', 2);I changed the values of the initial and final coordinates in some records in order to create lines from them, and I expected that in the 'geoline' field line values will appear only in those records in which the values of the coordinates in the starting point are not equal to the values of the coordinates end point, the rest will remain empty
UPDATE roads_arc_var4 SET geoline = ST_MakeLine(a, b);- But, the picture was different, see figure
What is the explanation for the PostGIS developers of this situation, because it's about 2D?
Or it is a problem with rounding off the values of coordinates, but in this case the user needs to understand what is its length, etc.

SELECT geom AS a, geom AS b FROM roads_arc_var3- no need for a costly self-join here. also, the=sign can lead to unexpected results, better useST_Equalsto check for geometry equality. – geozelot May 31 '18 at 09:28