mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Avoid permission failure in pg_sequences.last_value
Before, reading pg_sequences.last_value would fail unless the user had appropriate sequence permissions, which would make the pg_sequences view cumbersome to use. Instead, return null instead of the real value when there are no permissions. From: Michael Paquier <michael.paquier@gmail.com> Reported-by: Shinoda, Noriyoshi <noriyoshi.shinoda@hpe.com>
This commit is contained in:
parent
ad6af3fc42
commit
ab82340a43
@ -9882,7 +9882,10 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
|
|||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>The last sequence value written to disk. If caching is used,
|
<entry>The last sequence value written to disk. If caching is used,
|
||||||
this value can be greater than the last value handed out from the
|
this value can be greater than the last value handed out from the
|
||||||
sequence. Null if the sequence has not been read from yet.</entry>
|
sequence. Null if the sequence has not been read from yet. Also, if
|
||||||
|
the current user does not have <literal>USAGE</literal>
|
||||||
|
or <literal>SELECT</literal> privilege on the sequence, the value is
|
||||||
|
null.</entry>
|
||||||
</row>
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
|
@ -175,7 +175,11 @@ CREATE OR REPLACE VIEW pg_sequences AS
|
|||||||
S.seqincrement AS increment_by,
|
S.seqincrement AS increment_by,
|
||||||
S.seqcycle AS cycle,
|
S.seqcycle AS cycle,
|
||||||
S.seqcache AS cache_size,
|
S.seqcache AS cache_size,
|
||||||
pg_sequence_last_value(C.oid) AS last_value
|
CASE
|
||||||
|
WHEN has_sequence_privilege(C.oid, 'SELECT,USAGE'::text)
|
||||||
|
THEN pg_sequence_last_value(C.oid)
|
||||||
|
ELSE NULL
|
||||||
|
END AS last_value
|
||||||
FROM pg_sequence S JOIN pg_class C ON (C.oid = S.seqrelid)
|
FROM pg_sequence S JOIN pg_class C ON (C.oid = S.seqrelid)
|
||||||
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
||||||
WHERE NOT pg_is_other_temp_schema(N.oid)
|
WHERE NOT pg_is_other_temp_schema(N.oid)
|
||||||
|
@ -1647,7 +1647,10 @@ pg_sequences| SELECT n.nspname AS schemaname,
|
|||||||
s.seqincrement AS increment_by,
|
s.seqincrement AS increment_by,
|
||||||
s.seqcycle AS cycle,
|
s.seqcycle AS cycle,
|
||||||
s.seqcache AS cache_size,
|
s.seqcache AS cache_size,
|
||||||
pg_sequence_last_value((c.oid)::regclass) AS last_value
|
CASE
|
||||||
|
WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text) THEN pg_sequence_last_value((c.oid)::regclass)
|
||||||
|
ELSE NULL::bigint
|
||||||
|
END AS last_value
|
||||||
FROM ((pg_sequence s
|
FROM ((pg_sequence s
|
||||||
JOIN pg_class c ON ((c.oid = s.seqrelid)))
|
JOIN pg_class c ON ((c.oid = s.seqrelid)))
|
||||||
LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
|
LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user