Postgres中的varchar字段是否有一个diff / patch函数/库

时间:2018-08-21 22:10:29

标签: postgresql

我需要定期更新PG DB中大型varchar字段的值。 而不是发送并应用整个值,我只想发送一个diff值,并通过patch函数更新字段。
那么,有人可以建议PG的差异/补丁功能吗? 我的版本是9.6

谢谢

1 个答案:

答案 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);