use select in with block and update with join back in order to retain lateral joins in the update

This commit is contained in:
Paul Trowbridge 2018-12-02 01:18:29 -05:00
parent 43f9bb2d10
commit 87407e36fc

View File

@ -1,26 +1,9 @@
UPDATE
tps.srce
SET
defn =
--delete "schemas" from existing json and tack on revamped layout
jsonb_pretty((defn - 'schemas')||
--rebuild the schemas key value from below
jsonb_build_object(
'schemas'
--aggregate all the new key values for a single soure
,jsonb_agg(
--combine a new key 'name' with the columns for that name
jsonb_build_object('name',k)||jsonb_build_object('columns',v)
)
))
---------------select statement test-----------------------
/*
WITH
mod AS (
SELECT
srce
,jsonb_pretty(defn)
,jsonb_pretty((defn - 'schemas')||
,jsonb_pretty(defn) orig
,(defn - 'schemas')||
--rebuild the schemas key value from below
jsonb_build_object(
'schemas'
@ -29,11 +12,19 @@ SELECT
--combine a new key 'name' with the columns for that name
jsonb_build_object('name',k)||jsonb_build_object('columns',v)
)
))
) rebuild
FROM
tps.srce
LEFT JOIN LATERAL jsonb_each(defn->'schemas') WITH ORDINALITY je(k,v, rn) ON TRUE
GROUP BY
srce
,defn
*/
)
UPDATE
tps.srce s
SET
defn = rebuild
FROM
mod
WHERE
mod.srce = s.srce