小编fhu*_*ser的帖子

被 Hikari 标记为断开的 Postgresql 连接

我有一个 Spring 应用程序,它定期在 PostgreSQL-DB 中插入记录。现在,在完成一组预定的导入后,我需要几秒钟才能收到以下警告:

com.zaxxer.hikari.pool.ProxyConnection   : HikariPool-1 - Connection org.postgresql.jdbc.PgConnection@7d18a7dc marked as broken because of SQLSTATE(08006), ErrorCode(0)
Run Code Online (Sandbox Code Playgroud)

其次是这个异常:

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:335) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:132) ~[postgresql-42.2.5.jar:42.2.5]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na]
    at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:209) ~[jooq-3.11.9.jar:na]
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:432) ~[jooq-3.11.9.jar:na]
    at org.jooq.impl.AbstractDMLQuery.execute(AbstractDMLQuery.java:613) ~[jooq-3.11.9.jar:na]
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:350) ~[jooq-3.11.9.jar:na]
    at org.jooq.impl.Tools$10$1.block(Tools.java:4377) ~[jooq-3.11.9.jar:na]
    at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3118) ~[na:na]
    at org.jooq.impl.Tools$10.get(Tools.java:4374) ~[jooq-3.11.9.jar:na]
    at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) ~[na:na]
    at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692) ~[na:na]
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) ~[na:na] …
Run Code Online (Sandbox Code Playgroud)

postgresql spring jooq kotlin hikaricp

7
推荐指数
1
解决办法
3032
查看次数

从 openapi 中的文件上传获取流

我有一个后端应用程序(Java 8)和一个 Angular 前端。现在,我使用 multipart/formdata 添加了文件上传。我们使用 openapi 来生成 api 代码。这是用于生成它的代码部分:

"post": {
   ...
   "consumes" : [
      "multipart/form-data"
   ],
   "produces": [
      "application/json"
   ],
   "parameters": [
      {
         "name": "updateFile",
         "in": "formData",
         "type": "file",
         "required": true,
      }
   ],
   ...
}
Run Code Online (Sandbox Code Playgroud)

前端准备文件如下:

  const formData = new FormData();
  formData.append('updateFile', updateFile);
Run Code Online (Sandbox Code Playgroud)

这实际上工作得很好,并为我们提供了一个Part-Object。不幸的是,此代码将在生产中运行的机器非常弱,上传的文件太大而无法在其内存中处理(~130mb)。所以,我需要一个解决方法。我认为访问传入流将是一种将文件“即时”写入某个临时目录的优雅方式,而且我遇到过正是这样做的代码示例。我不知道如何配置我的端点以提供流而不是“完成的” Part-Object。

不幸的是,这个项目使用了一个相当老的 openapi 版本 2。

java openapi swagger-codegen

7
推荐指数
1
解决办法
142
查看次数

选择连续聚合比在 timescaledb 中选择原始数据慢

在我的数据库(Postgresql 12;timescaleDB 1.7.0)中有多个指标表,每分钟包含一行和设备。它包含一个 deviceId、时间、四个双精度值和一个枚举值。

有不同的基于时间的查询来分析数据,例如在它的 12 小时切片上绘制图形或选择最后 5m 的聚合状态。

为了提高查询性能,我为 12 小时的情况设置了 timescale 的连续聚合视图,这大大缩短了查询时间,因为一切都是预先计算好的。我对 5m 的小得多的切片进行了相同的尝试,希望有所改进,因为每个查询的数据会小得多,尽管不像 12h 示例中那样剧烈。令人惊讶的是,情况恰恰相反。现在选择原始数据比选择我不太理解的聚合视图要快得多。

这是我的观点的定义:

CREATE VIEW metric_5m
            WITH ( timescaledb.continuous,
            timescaledb.refresh_interval = '5 minutes' )
AS
SELECT device,
       time_bucket('5 minutes', time)   as "time_bucket",
       max(metric.maximum) as "maximum",
       min(metric.minimum) as "minimum",
       avg(metric.average) as "average",
       avg(metric.sd)      as "sd"
FROM metric
GROUP BY time_bucket, device;
Run Code Online (Sandbox Code Playgroud)

选择原始数据(在我的测试设置中约 360 万行)大约需要 300 毫秒,而选择视图需要大约 3500 毫秒。我怀疑我以某种方式使用它错误或间隔太小,因为它在 12h 示例中表现非常好,但我找不到原因。

所以,感谢这方面的每一个帮助!

postgresql timescaledb

5
推荐指数
1
解决办法
746
查看次数