Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners - Mailing list pgsql-bugs

From Robert Treat
Subject Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners
Date
Msg-id CABV9wwMPmDyHM7A5eET_Yb0pOOO1n03OpyhdWdUezm1je0DhWw@mail.gmail.com
Whole thread Raw
In response to Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners
List pgsql-bugs
On Mon, Sep 23, 2019 at 6:34 PM David G. Johnston
<david.g.johnston@gmail.com> wrote:
>
> On Mon, Sep 23, 2019 at 2:46 PM PG Bug reporting form <noreply@postgresql.org> wrote:
>>
>> The following bug has been logged on the website:
>>
>> Bug reference:      16018
>> Logged by:          Robert Treat
>> Email address:      rob@xzilla.net
>> PostgreSQL version: 11.5
>> Operating system:   osx
>> Description:
>>
>> I think there is a bug of sorts with pg_sequence_last_value(), in that the
>> security checks prevent a superuser (or owner) from seeing the last_value of
>> a sequence by way of this function. That seems like a use case that should
>> be supported (and since it isn't, it causes problems for a lot of other use
>> cases). As an example:
>>
>> postgres@54321:pagila=# create sequence x;
>> CREATE SEQUENCE
>>
>> postgres@54321:pagila=# select pg_sequence_last_value('x'::regclass);
>>  pg_sequence_last_value
>> ------------------------
>>
>> (1 row)
>>
>
> From pg_sequences:
> """
> last_value bigint The last sequence value written to disk. If caching is used, this value can be greater than the
lastvalue handed out from the sequence. Null if the sequence has not been read from yet. Also, if the current user does
nothave USAGE or SELECT privilege on the sequence, the value is null. 
> """
>

Ah, I hadn't really been working with pg_sequences, and there is no
documentation on pg_sequence_last_value, but since the former is
implemented using the latter, I guess it is safe to assume those
limitations would also apply to the underlying function.

> The null in the example seems to be due to the first condition (not been read from) not the second (privileges).
>

Ugh... the situation is further complicated in that setval seems to
cause a read, but alter sequence restart does not. Fun.

>> postgres@54321:pagila=# select * from x;
>>  last_value | log_cnt | is_called
>> ------------+---------+-----------
>>           1 |       0 | f
>> (1 row)
>
>
> The "last_value" on the sequence object has a different definition than the one on the relatively new pg_sequences
catalog.
>

Any chance you have a pointer to documentation on the differences? I
originally wanted to provide access to the information from the
sequence object, but that idea has been fading quite quickly.

> I'm not seeing where a bug has been shown to exist though I'll agree that the quick reading of the documentation
leavessome level of confusion. 
>

This might still just be a case of my simplified example being
deficient, but this gives me more to work with; hopefully enough to
either solve my problem or come up with a better test scenario. Thanks
for the response.


Robert Treat
https://xzilla.net



pgsql-bugs by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners
Next
From: Tom Lane
Date:
Subject: Re: BUG #16018: pg_sequence_last_value() doesn't give results for owners