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

标签 postgresql

我已经使用下面的查询从 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' 

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

我正在使用 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 函数可以获取此序列缓存值?

谢谢,

拉维

最佳答案

使用 PostgreSQL 10 或更新版本,可以从系统 View 中获取缓存大小 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;

结果:

-[ RECORD 1 ]-+--------------------
sequence_name | s
last_value    | 1
start_value   | 1
increment_by  | 1
max_value     | 9223372036854775807
min_value     | 1
cache_value   | 10
log_cnt       | 0
is_cycled     | f
is_called     | f

关于postgresql - 如何从 Postgresql 目录表中检索 Postgresql 序列缓存值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085197/

相关文章:

java - 使用 Java 处理 Postgresql 事务

regex - 如何在postgresql中使用正则表达式获取特定数据

java - 如何使用 PostgreSQL DB 插入当前日期和时间并以特定格式检索它?

xml - 如何在liquibase中创建复合索引

ruby-on-rails - psql : FATAL: Peer authentication failed for user "blah"

database - 对于可能以不同语言使用的 PostgreSQL 数据库,正确的排序规则是什么?

postgresql - Gorm卡在gorm.Open上,没有报错但是没有反应

sql - 如何在 Postgresql 中选择所有不包含某个子字符串的列?

php - 如何存储和部署大块的关系数据?

sql - 将行折叠成一列