gpt4 book ai didi

postgresql - BIGINT 的 Postgres 最大值

转载 作者:行者123 更新时间:2023-11-29 11:24:00 29 4
gpt4 key购买 nike

是否可以在不硬编码的情况下获取 BIGINT 类型的最大值?

我知道这个限制是众所周知的,但我不想对其进行硬编码。

最佳答案

您可以使用 pg_column_size ,它会给你 bigint 的字节大小。使用它你可以获得它的最大和最小尺寸:

select  (2^(8*pg_column_size(1::bigint)-2))::bigint << 1 as min_bigint_value;
select -(((2^(8*pg_column_size(1::bigint)-2))::bigint << 1)+1) as max_bigint_value;

因此,如果将来 bigint 最大值会以某种方式发生变化(非常非常不可能),如果您依赖这些计算值,您的代码仍然可以工作。

为了方便,您可以编写函数:

CREATE OR REPLACE FUNCTION "get_max_bigint_value"() RETURNS BIGINT as $$
DECLARE
max_bigint_value BIGINT;
BEGIN
SELECT -(((2^(8*pg_column_size(1::BIGINT)-2))::BIGINT << 1)+1) INTO max_bigint_value;
RETURN max_bigint_value;
END
$$ LANGUAGE "plpgsql";

CREATE OR REPLACE FUNCTION "get_min_bigint_value"() RETURNS BIGINT as $$
DECLARE
min_bigint_value BIGINT;
BEGIN
SELECT (2^(8*pg_column_size(1::bigint)-2))::bigint << 1 INTO min_bigint_value;
RETURN min_bigint_value;
END
$$ LANGUAGE "plpgsql";

然后:

SELECT get_min_bigint_value();
SELECT get_max_bigint_value();

关于postgresql - BIGINT 的 Postgres 最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28960478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com