diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 204b8cfd55ec523ea3332cfe48f7ee50aa68f1a4..787cc10bf853128ec8645fabe071535303a82e82 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -9882,7 +9882,10 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx <entry></entry> <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 - 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> </tbody> </tgroup> diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 28be27a07ecb6a8b63348416a782c122955a1e97..907e0fb6301f6148e4994dab7b30331ec9372583 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -175,7 +175,11 @@ CREATE OR REPLACE VIEW pg_sequences AS S.seqincrement AS increment_by, S.seqcycle AS cycle, 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) LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE NOT pg_is_other_temp_schema(N.oid) diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 60731a99b7c84d292d450ae43190a22a8b64a33e..9c99a451ba0a023a22692e0add4ced82ea384e3f 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1647,7 +1647,10 @@ pg_sequences| SELECT n.nspname AS schemaname, s.seqincrement AS increment_by, s.seqcycle AS cycle, 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 JOIN pg_class c ON ((c.oid = s.seqrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))