- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大约有 380 万行的表。当我查询整个表时,我得到
ERROR: value overflows numeric format
SELECT day,item,price,
CAST(my_func(price) OVER (PARTITION BY item ORDER BY day) AS numeric(8,2)),
FROM my_table
--WHERE day < '3/1/2013';
--WHERE day >= '3/1/2013';
WHERE
的声明子句执行没有错误。
numeric(8,2)
并且价格列中没有任何数字大于
numeric(8,2)
.无论如何,将格式更改为
numeric(20,2)
没有区别。
CREATE TABLE my_table
(
item character(5) NOT NULL,
day date NOT NULL,
price numeric(8,2),
CONSTRAINT my_table_pk PRIMARY KEY (item, day)
);
CREATE OR REPLACE FUNCTION my_func2 (avg numeric, IN price numeric)
RETURNS numeric AS $$
DECLARE
alpha numeric;
BEGIN
alpha := 2.0/51;
RETURN
CASE
WHEN avg IS NULL THEN price -- avg is NULL for the first row, so price is returned
ELSE round((alpha * price + (1-alpha) * avg),2)
END;
END;
$$ LANGUAGE PLPgSQL;
CREATE AGGREGATE my_func(numeric) (SFUNC = my_func2, STYPE = numeric);
最佳答案
错误在于您的类型转换操作。 numeric(8,2)
格式非常严格,可能 my_func()
返回的值不满足格式定义。为了证明这一点,请查看以下查询:
select 12.34::numeric(8,2);
numeric
---------
12.34
select 12.345678::numeric(8,2);
numeric
---------
12.35
select 12.3456789::numeric(8,2);
numeric
---------
12.35
select 123456.123456789::numeric(8,2);
numeric
-----------
123456.12
select 1234567.123456789::numeric(8,2);
ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
select 1234567.8::numeric(8,2);
ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
8
位数,并且始终具有
2
十进制位数。最后两个查询给出错误,因为它们应该返回超过
8
数字。例如,您希望数字
1234567.123456789
被四舍五入为
1234567.12
但
1234567.12
由
9
数字组成,而不是
8
。即使您有
1234567.8
数字,数字
8
也是如此。这是因为在返回的数值中你想要
2
十进制数字,所以 postgres 应该输出
1234567.80
但同样,这里你有
9
数字而不是
8
。
my_func()
用于 numeric(16,2)
总位数(选择您想要的数字),增加您期望从 16
获得的总十进制位数。 numeric
或 real
。例如:(my_func(price) OVER (PARTITION BY item ORDER BY day))::real
round(my_func(price) OVER (PARTITION BY item ORDER BY day), 2)
。否则,编辑 my_func()
以返回 round(returned_value, 2)
。 my_func()
的至少一个或一行,您会在左侧得到一个多于
6
数字的数字。要查找生成错误的行,您只需执行以下查询:
WITH not_casted AS (
SELECT day,item,price,
my_func(price) OVER (PARTITION BY item ORDER BY day) AS fprice
FROM my_table
)
SELECT * FROM not_casted
WHERE fprice > 999999.99
numeric(8,2)
内对
my_func()
进行类型转换,这会起作用,否则会在您类型转换的值上生成错误。不知道函数代码就不可能做出其他假设。
AGGREGATE
- 在充当数据的模拟随机样本上执行每个
AGGREGATE
(希望如此)。它每天生成
10
价格,每个价格都有自己的
item
,用于
10
天的
31
项目总数。为了证明精度损失,这并不重要,所以如果数据没有正确模拟,请不要怪我:)
-- typecast price and arithmetics to numeric(8,2)
CREATE OR REPLACE FUNCTION my_func_numeric_8_2_a (avg numeric(8,2), IN price numeric(8,2))
RETURNS numeric(8,2) AS $$
DECLARE
alpha numeric;
BEGIN
alpha := 2.0/51;
RETURN
CASE
WHEN avg IS NULL THEN price
ELSE (alpha * price + (1-alpha) * avg)::numeric(8,2)
END;
END;
$$ LANGUAGE PLPgSQL;
CREATE AGGREGATE my_func_numeric_8_2(numeric(8,2)) (SFUNC = my_func_numeric_8_2_a, STYPE = numeric(8,2));
-- typecast price and arithmetics to numeric and round(arithmetics, 2)
CREATE OR REPLACE FUNCTION my_func_numeric_round_a(avg numeric, IN price numeric)
RETURNS numeric AS $$
DECLARE
alpha numeric;
BEGIN
alpha := 2.0/51;
RETURN
CASE
WHEN avg IS NULL THEN price
ELSE round((alpha * price + (1-alpha) * avg), 2)
END;
END;
$$ LANGUAGE PLPgSQL;
CREATE AGGREGATE my_func_numeric_round(numeric) (SFUNC = my_func_numeric_round_a, STYPE = numeric);
-- no typecast (double precision type)
CREATE OR REPLACE FUNCTION my_func_dp_a(avg double precision, IN price double precision)
RETURNS double precision AS $$
DECLARE
alpha double precision;
BEGIN
alpha := 2.0/51;
RETURN
CASE
WHEN avg IS NULL THEN price
ELSE (alpha * price + (1-alpha) * avg)
END;
END;
$$ LANGUAGE PLPgSQL;
CREATE AGGREGATE my_func_dp(double precision) (SFUNC = my_func_dp_a, STYPE = double precision);
-- typecast price and arithmetics to numeric
CREATE OR REPLACE FUNCTION my_func_numeric_a(avg numeric, IN price numeric)
RETURNS numeric AS $$
DECLARE
alpha numeric;
BEGIN
alpha := 2.0/51;
RETURN
CASE
WHEN avg IS NULL THEN price
ELSE (alpha * price + (1-alpha) * avg)
END;
END;
$$ LANGUAGE PLPgSQL;
CREATE AGGREGATE my_func_numeric(numeric) (SFUNC = my_func_numeric_a, STYPE = numeric);
WITH sample AS
(
SELECT "day", (random())*10 AS price, generate_series(1,10)::text AS item
FROM (SELECT generate_series('2000-01-01'::timestamp, '2000-01-31'::timestamp, '1 day'::interval)::date AS "day") AS calendar
)
SELECT "day", item, price,
-- typecast price and arithmetics to numeric(8,2)
my_func_numeric_8_2(price::numeric(8,2)) OVER (PARTITION BY item ORDER BY "day") AS numeric_8_2,
-- typecast price and arithmetics to numeric and round(arithmetics, 2)
my_func_numeric_round(price::numeric) OVER (PARTITION BY item ORDER BY "day") AS numeric_round,
-- typecast price and arithmetics to numeric and round the final result
round(my_func_numeric(price::numeric) OVER (PARTITION BY item ORDER BY "day"), 2) AS round_numeric,
-- no typecast (double precision type)
my_func_dp(price) OVER (PARTITION BY item ORDER BY "day") AS no_typecast,
-- typecast price and arithmetics to numeric
my_func_numeric(price::numeric) OVER (PARTITION BY item ORDER BY "day") AS numeric
FROM sample
ORDER BY item, "day"
random()
的使用,每次查询执行都会产生不同的结果。向下滚动结果,您会看到许多具有不同值的行,即使
price
用于计算所有四个值也是如此。此外,列按降低精度损失(或提高精度)排序:
my_func_dp(price)
是四者中最精确的,而
my_func_numeric_8_2(price::numeric(8,2))
不太精确,但最“精确”。
my_func_numeric(price::numeric)
返回长度增加的数字,因为
numeric
尽可能精确,因此他的固定长度可以变化。如果您从 pgAdmin 执行它,您将得到一个完整长度数字的四舍五入数字。
关于PostgreSQL 表要大吗?内存不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40294002/
所以我正在为考试复习,并在 SQL 河(或荒地)中撞到了一块大石头 我制作了以下表格并插入了以下数据: create table Permissions ( fileName VARCHAR(
我有一个使用 maxWidth 定义的 jqueryui 对话框。 $("#myDialog").dialog({ autoOpen: false, width: 'a
注意:我遗漏了不相关的代码 所以我目前正在研究 CCC 1996 P1,这个问题的全部目的是能够计算一个整数输入是完美数、不足数还是充数。我上面列出的代码可以工作,但是我认为它太慢了。该代码会迭代每个
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 Go 和 Redis 开发 API。问题是RAM使用不足,我找不到问题的根源。 TL;DR 版本 有数百/数千个哈希对象。每个 1 KB 的对象(键+值)占用大约 0.5 MB 的 RAM
在我的 GCE Kubernetes 集群上,我无法再创建 pod。 Warning FailedScheduling pod (www.caveconditions.com-f1be467e3
当我尝试在EKS Fargate群集上安装指标服务器时,它抛出错误: 0/4 nodes are available: 4 Insufficient pods. 按照以下说明从此处安装指标服务器:ht
遍布this document Apple 提到 iOS 在某些情况下会终止应用程序,最常见的原因似乎是释放一些 RAM。这会导致未实现状态恢复的应用程序出现问题——用户正在处理和暂时离开的一些内容可
尝试处理一个10分钟的音频文件时出现以下错误。我刚刚开始使用Google Cloud产品,所以我是唯一访问此资源的人。我怎么可能超出配额?配额设置为其默认值,我认为我没有任何限制。还有其他原因吗? 我
R 语言让我感到困惑。实体有模式和类,但即使这样也不足以完全描述实体。 这个answer说 In R every 'object' has a mode and a class. 所以我做了这些实验:
我在 west-1 有一个 Openshift v3 项目。在其中,我有一个运行良好的应用程序,但在 GitHub 提交代码中非常下游的内容后,该应用程序停止工作。问题在于制作 pod: No nod
我在 west-1 有一个 Openshift v3 项目。在其中,我有一个运行良好的应用程序,但在 GitHub 提交代码中非常下游的内容后,该应用程序停止工作。问题在于制作 pod: No nod
在 how-do-i-access-the-stackoverflow-api-from-mathematica我概述了如何使用 SO API 让 Mathematica 制作一些有趣的顶级回答者声誉
所以在 GKE 上,我有一个 Node.js app,每个 pod 使用大约:CPU(cores): 5m, MEMORY: 100Mi 但是我只能为每个 Node 部署 1 个 pod。我使用的是
我正在使用 async.eachOfSeries 超过 300 个数组并请求一些 GA api,它工作正常但有时我会收到错误.. UnhandledPromiseRejectionWarning:错误
我正在尝试在 AWS ec2 上托管的 kubernetes 集群上使用 mr3 设置配置单元。当我运行命令 run-hive.sh 时,Hive 服务器启动,并且 master-DAg 被初始化,但
创建订阅时有时会出现以下错误: Insufficient tokens for quota 'administrator' and limit 'CLIENT_PROJECT-100s' of ser
我是一名优秀的程序员,十分优秀!