标签
PostgreSQL , 统计信息 , 唯一值 , 枚举值
背景
PostgreSQL的列统计信息中包含一项高频词,同时包含一项唯一值个数。
pg_stats.n_distinct
pg_stats.most_common_vals
同时PostgreSQL允许用户自定义统计信息柱状图BUCKET的个数。
alter table ALTER [ COLUMN ] column_name SET STATISTICS integer
默认柱状图BUCKET个数为100
postgres=# show default_statistics_target ;
default_statistics_target
---------------------------
100
(1 row)
当唯一值的个数小于柱状图的BUCKET个数时,从高频词(pg_stats.most_common_vals)得到的实际上就是该列的唯一值的内容。
例子
使用一个函数,加上以上判断逻辑,用来直接获取某个表,某个列的唯一值的内容。
create or replace function get_distinct_value(
name, -- schema
name, -- table
name -- column
) returns text as $$
declare
v int;
res text;
begin
select
case attstattarget
when -1 then current_setting('defaul