DELETE
の場合 修飾行が見つかりません。そのRETURNING
句は行なしを返します 。
タイトルは、「削除後に条件付きで更新/挿入する」を要求します。 、しかし、本文は「削除する行がない場合は失敗します」と文句を言います 。削除する行の存在が条件ではない場合、条件は何ですか?
手足に出かける、これはかもしれない あなたが望むものになりなさい:
CREATE FUNCTION updateoutfit(_id UUID, _title text DEFAULT NULL::text, _garments json)
RETURNS TABLE (id UUID, title text, garments json)
LANGUAGE sql AS
$func$
DELETE FROM outfit_garment WHERE outfit_id = _id; -- DELETE if exists
INSERT INTO outfit (id, title) -- UPSERT outfit
VALUES (_id, _title)
ON CONFLICT (id) DO UPDATE
SET title = EXCLUDED.title;
WITH ins AS ( -- INSERT new rows in outfit_garment
INSERT INTO outfit_garment (position_x, outfit_id)
SELECT "positionX", _id
FROM json_to_recordset(_garments) AS x("positionX" float) -- outfit_id UUID was unused!
RETURNING json_build_object('positionX', position_x) AS garments
)
SELECT _id, _title, json_agg(garments)
FROM ins
GROUP BY id, title;
$func$;
テーブルoutfit_garment
からすべての行を削除します 指定されたUUIDに対して、テーブルoutfit
の行を挿入または更新します。 、最後にテーブルoutfit_garment
に新しい詳細行を追加します 。 outfit_id
_garments
で渡されます 無視されます。
次に、すべての衣服がJSON値にマージされた単一の行を返します。