我需要定期更新PG DB中大型varchar字段的值。
而不是发送并应用整个值,我只想发送一个diff值,并通过patch函数更新字段。
那么,有人可以建议PG的差异/补丁功能吗?
我的版本是9.6
谢谢
答案 0 :(得分:0)
这是我得到的:
对不起,更高版本(已经两年了)
安装:https://github.com/google/diff-match-patch
在 Ubuntu (18.04) 上,我已经安装了这个数据包 sudo apt-get install postgresql-plpython3-10
然后在 postgres 中:
CREATE EXTENSION IF NOT EXISTS plpython3u;
DROP FUNCTION IF EXISTS pyhton_patch;
CREATE FUNCTION pyhton_patch(incoming_body TEXT, old TEXT) RETURNS TEXT AS $$
from diff_match_patch import diff_match_patch
new_body = ''
old_body = old
try:
dmp = diff_match_patch()
patch = dmp.patch_fromText(incoming_body)
if patch is not None and len(patch):
new_body, _ = dmp.patch_apply(patch, old_body)
else:
new_body = incoming_body
except ValueError as e:
new_body = incoming_body
except Exception as ex:
new_body = incoming_body
return new_body
$$ LANGUAGE plpython3u;
SELECT * FROM pyhton_patch('@@ -1 +1 @@
-aaa
+aaba'::TEXT, 'aaa'::TEXT);