2

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

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' 

无法获得的另一个属性值是“缓存”值。

我正在使用 Postgresql 9.2

这是带有缓存的序列的 DDL 语法,

更改序列 [如果存在] 名称 [增量 [按] 增量]

[ MINVALUE 最小值 | NO MINVALUE ] [ MAXVALUE 最大值 | 没有最大值]

[开始[与]开始]

[重启[[WITH]重启]]

[缓存缓存] [[否]循环]

[拥有者{ table_name.column_name | 没有任何 } ]

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

谢谢,

拉维

4

2 回答 2

5

这不再适用于 Postgres 10。您可以使用

select seqcache from pg_sequence where seqrelid = 's'::regclass;
于 2018-07-02T21:09:16.303 回答
4

使用 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
增量_by | 1
最大值 | 9223372036854775807
最小值 | 1
缓存值 | 10
日志_cnt | 0
is_cycled | F
被称为 | F
于 2013-08-06T17:07:39.467 回答