- 主题:磨叽的语法
项目要求 在6月30日前 完成从Oracle迁移到PostgreSQL
一、 Oracle有个磨叽(merge)的语法,PostgreSQL 9/10里面没有。
磨叽merge是把insert和update二合一。不存在就插入;已存在就更新。
解决方法I
用PG的 insert ... on conflict (x,y) do update aaa=excluded.aaa ...
这个conflict语法 也是把insert和update二合一
不冲突就插入 冲突就更新
但是 这个on conflict(x,y)只能用在主键的列x或者具有唯一性的列y上
【conflict-excluded】语法 不能完全代替 磨叽【merge】语法
解决方法II
用PG的
WITH upsert AS ( UPDATE ... RETURNING * )
INSERT INTO t
WHERE NOT EXISTS (...)
这个 with as (update returning *) insert where not exists() 语法,
也相当于update和insert二合一。
二、Oracle有decode语法,PostgreSQL里没有。
解决方法 把decode改为 (case when then when then when then else)
三、Oracle的行转列,列转行
……
之前有人说PostgreSQL和oracle大部分可以兼容
实际的情况:这个项目用的mybatis,迁移过程中几乎所有的sql都要重写
nvl() sysdate() rownum ...
--
FROM 218.18.166.*
ibatis,要好一些
【 在 PlutoKey 的大作中提到: 】
: 项目要求 在6月30日前 完成从Oracle迁移到PostgreSQL
:
: 一、 Oracle有个磨叽(merge)的语法,PostgreSQL 9/10里面没有。
: ...................
--来自微水木3.5.5
--
FROM 117.100.253.*
好在哪?
【 在 zhangkung (kungkung) 的大作中提到: 】
: ibatis,要好一些
: --来自微水木3.5.5
--
FROM 120.245.118.*
基于非主键/没有唯一约束的merge运行时真的不担心么
【 在 PlutoKey 的大作中提到: 】
: 项目要求 在6月30日前 完成从Oracle迁移到PostgreSQL
: 一、 Oracle有个磨叽(merge)的语法,PostgreSQL 9/10里面没有。
: 磨叽merge是把insert和update二合一。不存在就插入;已存在就更新。
: ...................
--
FROM 140.168.79.*