Re: Questions about setting an array element value outside of the update

From: David Johnston <polobo(at)yahoo(dot)com>
To: Maxim Boguk <maxim(dot)boguk(at)gmail(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Questions about setting an array element value outside of the update
Date: 2011-12-05 04:03:48
Message-ID: 9BE807B7-3155-49B4-A270-D5BEC189E1B9@yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Dec 4, 2011, at 22:43, Maxim Boguk <maxim(dot)boguk(at)gmail(dot)com> wrote:

> Lets say i have subquery which produce array[], position and new_value
>
> Is here less clumsy way to set array[position] to the new_value (not update but just change an element inside an array) than:
>
> SELECT
> _array[1:pos-1]
> ||newval
> ||_array[_pos+1:array_length(_array, 1)]
> FROM
> (
> SELECT _array,
> pos,
> newval
> FROM
> some_colmplicated_logic
> );
>
> The:
> _array[1:pos-1]
> ||newval
> ||_array[_pos+1:array_length(_array, 1)]
> part is very clumsy for my eyes.
>
> PS: that is just small part of the complicated WITH RECURSIVE iterator in real task.
>
> --
> Maxim Boguk
> Senior Postgresql DBA.

My first reaction is that you should question whether you really want to deal with arrays like this in the first place. Maybe describe what you want to accomplish and look for alternatives.

I do not know if there is a cleaner way but regardless you should code your logic as a function. If you devise a better way later then changing the algorithm will be very simple. And it also should make you inline SQL easier to follow.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Maxim Boguk 2011-12-05 04:06:27 pl/pgsql and arrays[]
Previous Message Maxim Boguk 2011-12-05 03:58:19 Re: WITH and WITH RECURSIVE in single query