GBase 8s
适配迁移
问答

gbasev8.8.5兼容pg版本,怎么实现数据upsert

发表于2026-01-09 15:33:10101次浏览3个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:GBase8sV8.8_S5.0.0B65

【操作系统】:Linux

【CPU】:

【问题描述】*:gbasev8.8.5兼容pg版本,怎么实现数据upsert,已知目标表具备唯一主键,希望实现数据增量更新

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 6个月前
没太明白。
Flame发表于 6个月前
@GBase用户28017:就是目前使用的gbase兼容postgresql,目前有一个需求是向表中更新数据,如果主键值不存在就插入,主键值存在就更新该条数据,实现表的增量更新效果:
比如向id(主键),name两个字段的表中初次插入(1,aaa),(2,bbb)两条数据,再次插入(1,aaa-update),(3,ccc)则向表中追加id为3的数据,并将id为1的数据name值更新为aaa-update,
在MySQL中实现该需求使用的语句为INSERT INTO test_table (id, name) VALUES (1, 'aaa-update'), (3, 'ccc') ON DUPLICATE KEY UPDATE name = VALUES(name); 如果使用GBase8sV8.8_S5.0.0B65该怎么实现?
用户头像
GBASE_Monica发表于 5个月前
@Flame:在gbase 8s 8.8.5的数据库中,可以通过ON CONFLICT DO UPDATE子句实现upsert操作。对于您给出的示例,id作为唯一索引约束,可以通过
INSERT INTO test_table (id, name)
VALUES (1, 'aaa-update'), (3, 'ccc')
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name;语句来实现。
ON CONFLICT DO UPDATE 中的 SET 和 WHERE 子句可以使用表的名称(或别名)访问现有行,并使用特殊的 excluded 表访问建议插入的行。需要对目标表中读取相应 excluded 列的任何列具有 SELECT 权限。
最佳回答