Yes that works (by chance or by design?) but it has the drawback that I have to specify all the columns in the insert/select, e.g.: INSERT INTO variables(id, orden, nombre, descripcion, longitud) SELECT id,orden+1,nombre,descripcion,longitud FROM variables WHERE orden>=6 ORDER BY orden DESC ON CONFLICT(id) DO UPDATE SET orden=excluded.orden; I'd prefer a query that only "touches" the column(s) I want to update.