Thread: updating a sequence

updating a sequence

From
John Fabiani
Date:
Hi,
I have need of a statement that updates the sequence but uses a max() to find 
the number.

alter sequence somename restart with (select max(pk) from sometable).

I need this for automating an ETL (using pentaho).

Postgres 8.4

Thanks in advance,
Johnf


Re: updating a sequence

From
Richard Broersma
Date:
On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com> wrote:

> alter sequence somename restart with (select max(pk) from sometable).
>
> I need this for automating an ETL (using pentaho).

http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNCTIONS-SEQUENCE-TABLE


-- 
Regards,
Richard Broersma Jr.


Re: updating a sequence

From
John Fabiani
Date:
On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
> On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com> wrote:
> > alter sequence somename restart with (select max(pk) from sometable).
> > 
> > I need this for automating an ETL (using pentaho).
> 
> http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNC
> TIONS-SEQUENCE-TABLE


I don't see how that helps answer my problem.  I know how to update a 
sequence.  I want to pass a value for the restart vaue that depends on a query 
- all in one statement.  I would think it is a common problem i.e. migrating 
data.

Thanks,
Johnf


Re: updating a sequence

From
Samuel Gendler
Date:
On Tue, Nov 15, 2011 at 4:28 PM, John Fabiani <johnf@jfcomputer.com> wrote:
On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
> On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com> wrote:
> > alter sequence somename restart with (select max(pk) from sometable).
> >
> > I need this for automating an ETL (using pentaho).
>
> http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNC
> TIONS-SEQUENCE-TABLE


I don't see how that helps answer my problem.  I know how to update a
sequence.  I want to pass a value for the restart vaue that depends on a query
- all in one statement.  I would think it is a common problem i.e. migrating
data.


use a subquery to set the value - 

select setval('foo', select max(some_id) from some_table)

It's all right there in the docs that you were pointed to. We try to encourage people to be somewhat self sufficient around here.


Re: updating a sequence

From
Scott Marlowe
Date:
On Tue, Nov 15, 2011 at 5:33 PM, Samuel Gendler
<sgendler@ideasculptor.com> wrote:
> On Tue, Nov 15, 2011 at 4:28 PM, John Fabiani <johnf@jfcomputer.com> wrote:
>>
>> On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
>> > On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com>
>> > wrote:
>> > > alter sequence somename restart with (select max(pk) from sometable).
>> > >
>> > > I need this for automating an ETL (using pentaho).
>> >
>> >
>> > http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNC
>> > TIONS-SEQUENCE-TABLE
>>
>>
>> I don't see how that helps answer my problem.  I know how to update a
>> sequence.  I want to pass a value for the restart vaue that depends on a
>> query
>> - all in one statement.  I would think it is a common problem i.e.
>> migrating
>> data.
>>
>
> use a subquery to set the value -
> select setval('foo', select max(some_id) from some_table)
> It's all right there in the docs that you were pointed to. We try to
> encourage people to be somewhat self sufficient around here.

You need to wrap a subselect in ():

select setval('foo', (select max(some_id) from some_table));

That works in 9.1.1.  No clue about previous versions off the top of
my head, but I seem to recall it doesn't work in 8.3 and prior
versions.


Re: updating a sequence

From
Scott Marlowe
Date:
On Tue, Nov 15, 2011 at 8:46 PM, Scott Marlowe <scott.marlowe@gmail.com> wrote:
> On Tue, Nov 15, 2011 at 5:33 PM, Samuel Gendler
> <sgendler@ideasculptor.com> wrote:
>> On Tue, Nov 15, 2011 at 4:28 PM, John Fabiani <johnf@jfcomputer.com> wrote:
>>>
>>> On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
>>> > On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com>
>>> > wrote:
>>> > > alter sequence somename restart with (select max(pk) from sometable).
>>> > >
>>> > > I need this for automating an ETL (using pentaho).
>>> >
>>> >
>>> > http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNC
>>> > TIONS-SEQUENCE-TABLE
>>>
>>>
>>> I don't see how that helps answer my problem.  I know how to update a
>>> sequence.  I want to pass a value for the restart vaue that depends on a
>>> query
>>> - all in one statement.  I would think it is a common problem i.e.
>>> migrating
>>> data.
>>>
>>
>> use a subquery to set the value -
>> select setval('foo', select max(some_id) from some_table)
>> It's all right there in the with docs that you were pointed to. We try to
>> encourage people to be somewhat self sufficient around here.
>
> You need to wrap a subselect in ():
>
> select setval('foo', (select max(some_id) from some_table));
>
> That works in 9.1.1.  No clue about previous versions off the top of
> my head, but I seem to recall it doesn't work in 8.3 and prior
> versions.

Was wrong, it definitely works in 8.3.  But only with the parens.


Re: updating a sequence

From
Sam Gendler
Date:

Sent from my iPhone

On Nov 15, 2011, at 7:49 PM, Scott Marlowe <scott.marlowe@gmail.com> wrote:

> On Tue, Nov 15, 2011 at 8:46 PM, Scott Marlowe <scott.marlowe@gmail.com> wrote:
>> On Tue, Nov 15, 2011 at 5:33 PM, Samuel Gendler
>> <sgendler@ideasculptor.com> wrote:
>>> On Tue, Nov 15, 2011 at 4:28 PM, John Fabiani <johnf@jfcomputer.com> wrote:
>>>>
>>>> On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
>>>>> On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com>
>>>>> wrote:
>>>>>> alter sequence somename restart with (select max(pk) from sometable).
>>>>>>
>>>>>> I need this for automating an ETL (using pentaho).
>>>>>
>>>>>
>>>>> http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html#FUNC
>>>>> TIONS-SEQUENCE-TABLE
>>>>
>>>>
>>>> I don't see how that helps answer my problem.  I know how to update a
>>>> sequence.  I want to pass a value for the restart vaue that depends on a
>>>> query
>>>> - all in one statement.  I would think it is a common problem i.e.
>>>> migrating
>>>> data.
>>>>
>>>
>>> use a subquery to set the value -
>>> select setval('foo', select max(some_id) from some_table)
>>> It's all right there in the with docs that you were pointed to. We try to
>>> encourage people to be somewhat self sufficient around here.
>>
>> You need to wrap a subselect in ():
>>
>> select setval('foo', (select max(some_id) from some_table));
>>
>> That works in 9.1.1.  No clue about previous versions off the top of
>> my head, but I seem to recall it doesn't work in 8.3 and prior
>> versions.
>
> Was wrong, it definitely works in 8.3.  But only with the parens.


Yes. My version without parens was just a typo. I didn't test it before sending it

Re: updating a sequence

From
John Fabiani
Date:
On Tuesday, November 15, 2011 07:46:19 pm Scott Marlowe wrote:
> On Tue, Nov 15, 2011 at 5:33 PM, Samuel Gendler
> 
> <sgendler@ideasculptor.com> wrote:
> > On Tue, Nov 15, 2011 at 4:28 PM, John Fabiani <johnf@jfcomputer.com> 
wrote:
> >> On Tuesday, November 15, 2011 08:33:54 am Richard Broersma wrote:
> >> > On Tue, Nov 15, 2011 at 8:06 AM, John Fabiani <johnf@jfcomputer.com>
> >> > 
> >> > wrote:
> >> > > alter sequence somename restart with (select max(pk) from
> >> > > sometable).
> >> > > 
> >> > > I need this for automating an ETL (using pentaho).
> >> > 
> >> > http://www.postgresql.org/docs/9.1/interactive/functions-sequence.html
> >> > #FUNC TIONS-SEQUENCE-TABLE
> >> 
> >> I don't see how that helps answer my problem.  I know how to update a
> >> sequence.  I want to pass a value for the restart vaue that depends on a
> >> query
> >> - all in one statement.  I would think it is a common problem i.e.
> >> migrating
> >> data.
> > 
> > use a subquery to set the value -
> > select setval('foo', select max(some_id) from some_table)
> > It's all right there in the docs that you were pointed to. We try to
> > encourage people to be somewhat self sufficient around here.
> 
> You need to wrap a subselect in ():
> 
> select setval('foo', (select max(some_id) from some_table));
> 
> That works in 9.1.1.  No clue about previous versions off the top of
> my head, but I seem to recall it doesn't work in 8.3 and prior
> versions.

Thanks that did work with the parens.  

I could not get to work earlier.

Johnf


Re: updating a sequence

From
John Fabiani
Date:
On Tuesday, November 15, 2011 08:06:30 am John Fabiani wrote:
> Hi,
> I have need of a statement that updates the sequence but uses a max() to
> find the number.
> 
> alter sequence somename restart with (select max(pk) from sometable).
> 
> I need this for automating an ETL (using pentaho).
> 
> Postgres 8.4
> 
> Thanks in advance,
> Johnf


Thanks everyone!

Johnf


Re: updating a sequence

From
Jasen Betts
Date:
On 2011-11-16, Scott Marlowe <scott.marlowe@gmail.com> wrote:

> You need to wrap a subselect in ():
>
> select setval('foo', (select max(some_id) from some_table));


I prefer to do it in once select like this:

select setval('foo', max(some_id)) from some_table;


-- 
⚂⚃ 100% natural