Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitab82340

Browse files
committed
Avoid permission failure in pg_sequences.last_value
Before, reading pg_sequences.last_value would fail unless the user hadappropriate sequence permissions, which would make the pg_sequences viewcumbersome to use. Instead, return null instead of the real value whenthere are no permissions.From: Michael Paquier <michael.paquier@gmail.com>Reported-by: Shinoda, Noriyoshi <noriyoshi.shinoda@hpe.com>
1 parentad6af3f commitab82340

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

‎doc/src/sgml/catalogs.sgml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9882,7 +9882,10 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
98829882
<entry></entry>
98839883
<entry>The last sequence value written to disk. If caching is used,
98849884
this value can be greater than the last value handed out from the
9885-
sequence. Null if the sequence has not been read from yet.</entry>
9885+
sequence. Null if the sequence has not been read from yet. Also, if
9886+
the current user does not have <literal>USAGE</literal>
9887+
or <literal>SELECT</literal> privilege on the sequence, the value is
9888+
null.</entry>
98869889
</row>
98879890
</tbody>
98889891
</tgroup>

‎src/backend/catalog/system_views.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,11 @@ CREATE OR REPLACE VIEW pg_sequences AS
175175
S.seqincrementAS increment_by,
176176
S.seqcycleAS cycle,
177177
S.seqcacheAS cache_size,
178-
pg_sequence_last_value(C.oid)AS last_value
178+
CASE
179+
WHEN has_sequence_privilege(C.oid,'SELECT,USAGE'::text)
180+
THEN pg_sequence_last_value(C.oid)
181+
ELSENULL
182+
ENDAS last_value
179183
FROM pg_sequence SJOIN pg_class CON (C.oid=S.seqrelid)
180184
LEFT JOIN pg_namespace NON (N.oid=C.relnamespace)
181185
WHERE NOT pg_is_other_temp_schema(N.oid)

‎src/test/regress/expected/rules.out

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1647,7 +1647,10 @@ pg_sequences| SELECT n.nspname AS schemaname,
16471647
s.seqincrement AS increment_by,
16481648
s.seqcycle AS cycle,
16491649
s.seqcache AS cache_size,
1650-
pg_sequence_last_value((c.oid)::regclass) AS last_value
1650+
CASE
1651+
WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text) THEN pg_sequence_last_value((c.oid)::regclass)
1652+
ELSE NULL::bigint
1653+
END AS last_value
16511654
FROM ((pg_sequence s
16521655
JOIN pg_class c ON ((c.oid = s.seqrelid)))
16531656
LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp