我想建立PostgreSQL中的自定义相等操作符,可以在使用GROUP BY,UNION并DISTINCT [ON]为json类型(只是为了好奇的缘故,而不是真实世界中的实现-这就是为什么即将到来的jsonb类型是不是我要找的)。
我可以编写一个函数来测试json相等性:
CREATE OR REPLACE FUNCTION json_equals(json, json)
RETURNS BOOLEAN
LANGUAGE sql
IMMUTABLE
STRICT
AS $function$
SELECT CASE f1
WHEN '{' THEN -- object
CASE f2
WHEN '{' THEN (
SELECT COALESCE(bool_and(k1 IS NOT NULL AND k2 IS NOT NULL AND json_equals(v1, v2)), TRUE)
FROM (SELECT DISTINCT ON (k1) * FROM json_each($1) AS j1(k1, v1) ORDER BY k1, row_number() OVER () DESC) AS j1
FULL JOIN …Run Code Online (Sandbox Code Playgroud)