You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:53:10