如何从Postgresql目录表中检索Postgresql序列缓存值?

3

我使用以下查询从Postgresql目录表中获取Sequence对象的完整信息:

select s.sequence_name, s.start_value, s.minimum_value, s.maximum_value, s.increment, s.cycle_option 
from information_schema.sequences s 
 where s.sequence_schema='schema1' 

我无法获得的另一个属性值是 "Cache" 值。

我正在使用PostgreSQL 9.2

下面是带有缓存的序列DDL语法:

ALTER SEQUENCE [ IF EXISTS ] name [ INCREMENT [ BY ] increment ]

[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]

[ START [ WITH ] start ]

[ RESTART [ [ WITH ] restart ] ]

[ CACHE cache ] [ [ NO ] CYCLE ]

[ OWNED BY { table_name.column_name | NONE } ]

是否有任何Postgres函数可以获取此序列缓存值?

谢谢,

Ravi

2个回答

5
这在Postgres 10中不再有效。您可以使用以下内容:
select seqcache from pg_sequence where seqrelid = 's'::regclass;

5

使用 PostgreSQL 10 及更高版本,可以从系统视图 pg_sequences 或系统表格 pg_sequence 中获取缓存大小:

SELECT cache_size FROM pg_catalog.pg_sequences
 WHERE schemaname='public' and sequencename='s';

或者,另一种选择是
SELECT seqcache FROM pg_catalog.pg_sequence
  WHERE seqrelid = 'public.s'::regclass;

第二个查询中可以省略模式限定符(public 或者更一般的模式名称),以使用自动的 search_path 而不是一个固定的模式。

版本号低于 v10 的情况下,您可以将序列本身查询,就像它是一张表一样。

例如:

CREATE SEQUENCE s CACHE 10;
SELECT cache_value FROM s;

结果:

 cache_value 
-------------
          10

或者

\x
SELECT * FROM s;

结果:

-[记录1]-+--------------------
序列名称 | s
最后值    | 1
开始值   | 1
增量  | 1
最大值     | 9223372036854775807
最小值     | 1
缓存值   | 10
日志计数       | 0
循环标志     | 否
已调用标志     | 否

这在最近版本的Postgres中不起作用。 - Colin 't Hart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接