On Mon, Sep 29, 2025 at 3:34 PM Florents Tselai <[email protected]>
wrote:

>
>
> On 28 Sep 2025, at 2:26 PM, Pavel Stehule <[email protected]> wrote:
>
>
>
> ne 28. 9. 2025 v 12:11 odesílatel Florents Tselai <
> [email protected]> napsal:
>
>> Thanks for taking the time Evan
>>
>> On Sun, Sep 28, 2025, 12:34 Chao Li <[email protected]> wrote:
>>
>>> Hi Florents,
>>>
>>> Thanks for the patch. I once had the same pain on a similar task, I had
>>> to create a PL/SQL function at the time.
>>>
>>> I haven’t read the code change yet, but I think the function name
>>> jsonb_translate() sounds to generic. To make the name more meaningful, I
>>> would suggest a few candidates: jsonb_replace_text(), or
>>> jsonb_replace_value(), or jsonb_deep_replace().
>>>
>>> Also, I want to understand why do you decide to support only whole word
>>> matching?
>>>
>>> ```
>>> evantest=# select jsonb_translate('{"message": "world"}', 'wor',
>>> 'earth');
>>>    jsonb_translate
>>> ----------------------
>>>  {"message": "world"}
>>> (1 row)
>>> ```
>>>
>>> With this patch, partial match will not result in a replacement.
>>>
>>
>> That is on purpose. My use case for this is to replace categorical/enum
>> values scattered deep inside the json structure.
>> Hence the name translate which usually means mapping from one key space
>> to another.
>>
>> Partial replacement wasn't the case for me, and most importantly I guess
>> I could achieve the same by casting to text replacing and casting back to
>> jsonb.
>>
>
> Cannot be better to use JsonPath for specification what should be replaced?
>
>
> Fair point.
> The main purpose of this patch is to provide a recursive, global
> replacement across all values and arrays,
> which is not as straightforward to express in JSONPath today.
> I understand that some may find this too case-specific, so I’m just
> leaving it out there for consideration.
> That said, I believe it can be quite useful in domains where documents
> carry many tags or labels that need to be translated or normalized
> consistently.
>

Here's a v2 with a json_translate implementation for consideration

Attachment: v2-0001-Add-json-b-_translate-function.patch
Description: Binary data

Reply via email to