我们有大量使用 Postgres 9.3 将 json 数据插入/更新到 JSON 列的 PLPGSQL 代码
我们希望随着时间的推移将代码转换为 JSONB 格式,并利用更好的索引和新的运算符。
有没有一种方法可以在不重写我们所有代码以使用新的 JSONB 格式的情况下做到这一点。
例如,我们有很多接受和返回 JSON 的函数,粗略的例子:-
FUNCTION foo(payload JSON) RETURNS JSON AS
$$
BEGIN
...
INSERT INTO baa(json, name) VALUES(payload, 'name');
RETURN '{"message" : "done"}'::JSON
END
$$ LANGUAGE PLPGSQL;
我的理想是无需重写函数即可将 json 转换为 jsonb。我在插入之前尝试了一个触发函数来执行此操作,但这不起作用,因为 postgres 查询语法检查器首先到达那里:-
ERROR: column "json" is of type jsonb but expression is of type json
我怀疑我无能为力,将不得不重写所有代码(1000 行),但我想我会把它放在那里看看是否有一个聪明的想法可以让我在插入时进行 CAST /update 并为重写争取一些时间。