PostgreSQL 9.2中如何查询序列的cache_size值
PostgreSQL 9.2 版本的information_schema.sequences视图本身未暴露cache_size字段,存储序列核心元数据的系统表pg_sequence是10.0版本才引入的,因此高版本的查询方案在9.2环境下无法生效。9.2版本可通过以下方式查询序列缓存值:
单个序列查询
PostgreSQL 10之前的版本中,每个序列本质是一类特殊的单行关系,可直接通过SELECT语句读取其内置字段获取配置,针对你创建的SEQUENCE1,查询语句如下:
-- 若序列名创建时加双引号保留了大写格式,需要用"SEQUENCE1"替换下方的sequence1 SELECT cache_value AS cache_size FROM sequence1;
执行后返回的结果就是你创建序列时CACHE参数设置的值,你的示例场景下返回结果为1。
除缓存大小外,你还可以通过直接查询序列获取以下配置:
last_value:序列当前已生成的最新值increment_by:序列步长max_value:序列允许的最大值min_value:序列允许的最小值is_cycled:序列是否开启循环(达到最值后重置)is_called:序列是否已被调用过
批量查询所有序列的缓存值
如果需要一次性查询库中所有用户序列的缓存配置,可以通过系统目录pg_class筛选序列类型对象,配合query_to_xml批量拉取属性,示例语句如下:
SELECT n.nspname AS sequence_schema, c.relname AS sequence_name, (xpath('/row/cache_value/text()', query_to_xml(format('SELECT cache_value FROM %I.%I', n.nspname, c.relname), true, false, '')))[1]::integer AS cache_size FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relkind = 'S' AND n.nspname NOT IN ('pg_catalog', 'information_schema');
注意:执行上述批量查询语句的账号,需要拥有目标序列的SELECT权限,否则会抛出权限不足错误。
内容的提问来源于stack exchange,提问作者user13746660
相关产品推荐
相关产品推荐

