Postgresql-显示INTEGER,BIGINT的用法

问题描述 投票:0回答:1

我有一个大型PG数据库。有INTEGER和BIGINT字段。整数的mas最大值为2147483647,bigint为9223372036854854775807。

我如何找到使用率(最大值非常近)很大(大约80-90%)的字段来更改字段类型?有任何工具吗?

我可以使用自定义脚本并向db进行许多查询,但是也许有Linux工具可以这样做。

谢谢。

linux postgresql database-administration
1个回答
0
投票

您的问题仅在您要谈论的列是按顺序填充时才有意义。

如果我没看错,您可以使用此查询来计算出可用数字耗尽的百分比:

SELECT relname AS sequence_name,
       coalesce(pg_sequence_last_value(oid) /
                CASE a.atttypid
                   WHEN 'smallint'::regtype THEN 32767::numeric
                   WHEN 'integer'::regtype THEN 2147483647::numeric
                   WHEN 'bigint'::regtype THEN 9223372036854775807::numeric
                END, 0) * 100 AS percent_used
FROM pg_class AS s
   JOIN pg_depend AS d ON d.objid = s.oid
   JOIN pg_attribute a ON d.refobjid = a.attrelid
                          AND d.refobjsubid = a.attnum
WHERE s.relkind = 'S'
  AND d.refclassid = 'pg_class'::regclass
  AND d.classid = 'pg_class'::regclass
ORDER BY 2 DESC;

[这假定在列和序列之间存在关系,这是为serialbigserial列以及标识列建立的。

此建议可能为时已晚,但您应始终对生成的密钥使用bigint,因为这样就永远不会有数字用尽的危险。

© www.soinside.com 2019 - 2024. All rights reserved.