实际上我们使用library(data.table)
dt = data.table("date-time"=c(as.POSIXct(c("2017-08-23 07:49:38", "2017-08-23 07:49:48", "2017-08-23 07:49:58", "2017-08-23 07:50:08", "2017-08-23 07:50:18", "2017-08-23 07:50:28" ))), RSSI=c(-68, -69, -59, -65, 127, -74))
dt[RSSI > 0 , RSSI:=NA] #replacing positive ones with NA
print(dt)
dt[ , minute:=floor(as.numeric(`date-time`)/60)] # calculate for each time in which minute it belongs
# calculate mean and standard deviation per group
dt[ , c("mean", "stdev") := list(mean(RSSI, na.rm=TRUE), sd(RSSI, na.rm=TRUE)), by = minute] #ignoring the NA outliers
dt[ abs(RSSI - mean) > stdev | is.na(RSSI), RSSI:=round(mean)] #round should return an integer
print(dt)
来表示某些方法,但这些方法以某种方式执行nextVal(),这对其他数据库来说很好,但在Postgres 9.6.3上会导致以下错误。
@Transactional(readOnly=true)
我正在浏览Postgres Mail日志,并发现此错误仅在8.4.2 https://www.postgresql.org/message-id/BANLkTik9ikVUU-bznOhZHmLbdEx5fverCw%40mail.gmail.com
之后发生有没有办法在数据库级别修复此问题。
答案 0 :(得分:0)
https://www.postgresql.org/docs/current/static/functions-sequence.html
提前序列并返回新值
因此它会更改值 - 这不能在只读事务中完成。
更新
set transaction_read_only to on;
使会话只读,而不仅仅是一个事务(SET LOCAL
的情况)
从你的链接中引用克雷格
前 9.0,Pg只是没有注意到并警告你。
所以当你没有被警告时,早先有一个错误。但是nextval没有滚动下一个值
没有什么可以修复她 - 要么set transaction_read_only to off
要么推进序列,要么使用currval
。你可以有一个只读事务,然后修改数据 - 逻辑在哪里?..