使用pglite(PostgreSQL 16)执行UPDATE JOIN后首次SELECT无法获取更新结果的问题求助
使用pglite(PostgreSQL 16)执行UPDATE JOIN后首次SELECT无法获取更新结果的问题求助
大家好,我在Firefox环境下使用pglite(PostgreSQL 16版本)时碰到了一个特别诡异的问题:执行完UPDATE JOIN语句后,第一次执行SELECT查询完全看不到更新后的结果,但第二次执行就能正常拿到最新的数据了!
下面是我执行更新操作的代码:
async function handleDeselectElement() { console.assert(g.parentNode.tagName=='svg'); const idbox = parseInt(g.id.substring('g_'.length)); const selectedContextIndex = parseInt(g.parentElement.id); const xForms = g.transform.baseVal;// an SVGTransformList const firstXForm = xForms.getItem(0); //an SVGTransform console.assert (firstXForm.type == SVGTransform.SVG_TRANSFORM_TRANSLATE); const translateX = firstXForm.matrix.e; const translateY = firstXForm.matrix.f; const ret = await db.query(` UPDATE translation t SET x=${translateX}, y=${translateY} FROM rectangle r WHERE t.idrectangle=r.idrectangle AND r.idbox=${idbox} RETURNING * `); console.log(ret); await enforce_bounding_rectangle(selectedContextIndex); const links = await compute_links(selectedContextIndex); // mycontexts.contexts[selectedContextIndex].links = await links; document.getElementById(`links_${selectedContextIndex}`).innerHTML = drawLinks(links); }
而这是后续触发的SELECT查询代码——就是这个查询,第一次执行时拿不到UPDATE更新后的translation表数据,第二次执行就正常了:
upload.addEventListener("click", async (evt)=>{ const ret = await db.query(` SELECT json_build_object( 'diagram', (SELECT json_agg(row_to_json(diagram))::json FROM diagram), 'box', (SELECT json_agg(row_to_json(box))::json FROM box), 'field', (SELECT coalesce(json_agg(row_to_json(field))::json, '[]'::json) FROM field), 'value', (SELECT coalesce(json_agg(row_to_json(value))::json, '[]'::json) FROM value), 'link', (SELECT coalesce(json_agg(row_to_json(link))::json, '[]'::json) FROM link), 'tag', (SELECT json_agg(row_to_json(tag))::json FROM tag), 'message_tag', (SELECT coalesce(json_agg(row_to_json(message_tag))::json, '[]'::json) FROM message_tag), 'graph', (SELECT coalesce(json_agg(row_to_json(graph))::json, '[]'::json) FROM graph), 'rectangle', (SELECT json_agg(row_to_json(rectangle))::json FROM rectangle), 'translation', (SELECT json_agg(row_to_json(translation))::json FROM translation), 'polyline', (SELECT coalesce(json_agg(row_to_json(polyline))::json, '[]'::json) FROM polyline) ); `); const doc = ret.rows[0].json_build_object; const json_doc = JSON.stringify(doc); console.log(json_doc); const response = await fetch( //"https://www.diskloud.fr:3000/linkedboxdraw/post", "https://109.11.33.79:8443/linkedboxdraw/post", { method: "POST", body: json_doc, headers: {"Content-Type": "application/json"} } ); console.log(response.status); });
我已经确认UPDATE语句返回的ret里能看到更新后的正确数据,但就是搞不懂为什么后续点击upload触发的SELECT第一次就是拿不到最新的translation数据。有没有大佬遇到过类似的问题,或者能给我指排查方向的?
备注:内容来源于stack exchange,提问作者Ludovic Aubert
相关产品推荐
相关产品推荐

