Determining offsets to jump to grab a group of records - Mailing list pgsql-general

From David Lambert
Subject Determining offsets to jump to grab a group of records
Date
Msg-id g2phj2$4k8$1@news.hub.org
Whole thread Raw
Responses Re: Determining offsets to jump to grab a group of records  ("David Wilson" <david.t.wilson@gmail.com>)
List pgsql-general
I am trying to find a way to figure out what offset I would have to use
in a SELECT with LIMIT and OFFSET clauses to get a grouping of records.
For example:

   Consider a table full of first names.  I want to be able to find the
first offset where the name is "DAVID".  (We'll say that it is the
1009th row in the resulting select) This way I could perform the following:

    SELECT name FROM nametable LIMIT 25 OFFSET 1009;

Is this possible with PostgresQL?  I have already tried the following
using a temporary sequence.

    CREATE TEMP SEQUENCE RNUM;
    SELECT newoffset FROM (SELECT nextval('RNUM') AS newoffset, X.* FROM
(SELECT name FROM nametable ORDER BY name) X) Y WHERE name='DAVID';


Unfortunately, this just returns a bunch of rows with "1,2,3,4,5"
instead of "1009,1010,1011".  It seems that the nextval('RNUM') is only
executed once the outer select is being evaluated.  Is there a way
around this?

If I execute just the inner select:

    SELECT nextval('RNUM') AS newoffset, X.* FROM (SELECT name FROM
nametable ORDER BY name) X

Then it outputs the correct numbers but doesn't filter out the records
that I need.

Does anyone know of a different way to calculate an approximate offset?
  Any help you can provide is greatly appreciated.

David Lambert

pgsql-general by date:

Previous
From: Adam Dear
Date:
Subject: Re: Unable to dump database using pg_dump
Next
From: "David Wilson"
Date:
Subject: Re: Determining offsets to jump to grab a group of records