public inbox for [email protected]  
help / color / mirror / Atom feed
From: TIM CHILD <[email protected]>
To: SQL Padawan <[email protected]>
To: [email protected] <[email protected]>
Subject: Re: Strange sequences - how to construct?
Date: Fri, 22 Oct 2021 16:01:14 -0700 (PDT)
Message-ID: <[email protected]> (raw)
In-Reply-To: <tiUZZ67DYCE5aY4wDAfIXjzlghyf4ndcG2m7wWRd0Rq3rtyhd38iJ9fN2iG088MxWOQtEBlEbsLXzqq-RUYer6rXXfS67pjdwthg8YRIgQU=@protonmail.com>
References: <tiUZZ67DYCE5aY4wDAfIXjzlghyf4ndcG2m7wWRd0Rq3rtyhd38iJ9fN2iG088MxWOQtEBlEbsLXzqq-RUYer6rXXfS67pjdwthg8YRIgQU=@protonmail.com>

Here is solution using a prepopulated  sequence table:


drop table if exists my_sequence cascade;
-- a new table to hold the sequence values
create table my_sequence
(
nextval integer not null, -- this is an arbitrary sequence value we want to use
key_order serial not null primary key, -- the insert order dictates the sequence bases on the key
used boolean not null default 'False' -- is the sequence spoken for
);

create index on my_sequence( used, key_order); -- index for speed
-- prepopulate the sequence with the values you need
insert into my_sequence values
(1), (1), (2), (2), (3), (3);

-- a function to generate teh next sequence and make is used

create or replace function next_sequence() returns integer as
$body$
declare
rv integer;
key_v integer;
begin
select nextval, key_order into rv , key_v from my_sequence where not used order by key_order limit 1 for update; --lock the row
update my_sequence set used = True where key_order = key_v; -- update row as used
return rv;
end;
$body$
language plpgsql;

--- example: lets get 3 sequences
select next_sequence(), next_sequence(), next_sequence();

--- inspect the table to see what happned
select * from my_sequence;






>     On 10/22/2021 12:29 PM SQL Padawan <[email protected]> wrote:
> 
> 
> 
>     Good afternoon to everybody.
> 
>     I wish to construct some weird sequences.
> 
>     1
>     1
>     2
>     2
>     &c.
> 
>     and with  3 ones, 4 ones... &c.
> 
>     Now, I know how to do a simple
>     1
>     2
>     3
>     4
> 
>     using both GENERATE_SERIES and using a RECURSIVE CTE.
> 
>     What I would like is to be able to construct my specified sequences using *_both_* GENERATE_SERIES *_and_* RECURSIVE CTEs.
> 
>     Regards,
> 
>     SQL Padawan!
> 
> 
> 
> 
> 
>     Sent with ProtonMail https://protonmail.com/ Secure Email.
> 
> 


view thread (6+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: Strange sequences - how to construct?
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox