问题标签 [pg-jdbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
74 浏览

java - 从 PostgreSQL 读取单列时出现 OutOfMemoryError

我正在尝试从本地安装的 PostgreSQL 10.3 中的一张表中读取其中一列

我运行带有-verbose:gc -Xmx512MVM 选项的程序。项目只有依赖:org.postgresql:postgresql:42.2.1

而且我总是收到OOM错误:

有什么办法可以避免OOM?

0 投票
0 回答
652 浏览

postgresql - 缓存计划不得更改结果类型

当我修改列的长度或在表中添加新列时,我们的服务团队有时会收到错误缓存计划不能更改结果类型。

我尝试了 Stack Overflow 上提到的解决方案,例如Postgres:“错误:缓存计划不能更改结果类型”

我已尝试autosave=conservative解决此问题,但仍然可以重现此问题。我在下面使用了 JDBC 连接字符串

为什么这个属性在我的情况下不起作用?

此外,我测试过prepareThreshold=0它的工作正常。但我认为它会影响性能,因为它永远不会使用客户端准备好的语句。

我只想知道避免此错误的最佳解决方案。

0 投票
2 回答
3842 浏览

java - PGJDBC:无法从客户端接收数据:

亲爱的 StackOverFlowers,

我在 Postgres 9.6(Windows 10)上尝试事件驱动的监听器/通知。

我遵循了 Steve Taylor 在https://www.openmakesoftware.com/postgresql-listen-notify-events-example/给出的 PGJDBC 示例。

我首先下载 pgjdbc-ng-0.7-complete.jar 并将其放入我的 CLASSPATH 替换标准 JDBC 驱动程序。

当我尝试使用 pgjdbc 驱动程序连接到 Postgres 数据库时,出现错误:

收到的连接:主机=127.0.0.1 端口=50325

连接授权:用户=postgres 数据库=scott

无法从客户端接收数据:现有连接被远程主机强行关闭。

这是我的系统变量:

数据库主机:本地主机

数据库名称:斯科特

数据库端口:5432

数据库用户名:postgres

数据库密码:postgres

我没有越过第一个障碍,休息看起来像珠穆朗玛峰。请帮我。如果您需要代码,我将按照史蒂夫的代码同上。

除了约瑟夫拉森的回答,数据库一直在运行。我已成功从 PGADMIN 和 Java 连接到 Postgres 数据库。我认为问题在于连接字符串。当我使用 Postgres 提供的标准 JDBC 时,从 Java 中使用类似 jdbc:postgresql://localhost:5432/dbname 的 URL,但 PGJDBC 建议使用不同的连接字符串,如 JDBC:PGSQL://localhost:5432/dbname。我试图(强制)连接该字符串,但它不起作用。PGJDBC PGDataSource 中没有直接提供 URL 的方法。我不得不经历:

数据源.setHost(DBHost);

数据源.setPort(5432);

dataSource.setDatabase(DBName);

dataSource.setUser(DBUserName);

dataSource.setPassword(DBPassword);

我无法弄清楚它发送到数据库的 URL 是什么。请建议我一个连接字符串,这个问题就解决了。

谢谢

非常感谢您要求我发布错误消息:

这是源代码:

0 投票
0 回答
609 浏览

postgresql - postgresql 逻辑复制流失败并显示“从副本读取时数据库连接失败”

嗨,我正在无限循环中连续读取逻辑复制流。我有另一个程序不断填充同一个数据库中的表。我注意到一段时间后(大约 5-10 分钟)。我总是得到例外

这是我的示例程序:

}

任何帮助表示赞赏!我正在使用 postgres JDBC 驱动程序 42.2.2。

0 投票
1 回答
122 浏览

postgresql - pgjdbc-ng 格式错误的区域:

目前我正在尝试制作一个模块,该模块将通过 Postgres 上的触发器监听任何更改。我正在使用 pgjdbc-ng ver 0.8.2,从 maven repo central 下载 JAR 并将其添加为项目参考。

以下是我使用的代码:

运行后,我得到了异常:

病态区域:印度尼西亚 [在索引 0]

我已经阅读了官方的 git,说它应该在某个版本号内修复。

我如何应用这些修复?

谢谢

0 投票
0 回答
1423 浏览

java - PG JDBC 驱动程序中的错误 - MONEY DB 类型(双精度类型的错误值)

我正在使用 Postgres JDBC 驱动程序 (postgresql-42.2.5.jar) 和 PostgreSQL 10.6 RDBMS。

我有一个结果集,其中 3 列属于类型money (在数据库级别)。我有一个结果集元数据对象。

当列类型为money 时,驱动程序的getColumnType() 方法为money列返回8。

我查了一下,值 8 表示双倍。

但是从数据库返回的值类似于 $1,312,536.00or say 1,312,536.00

因此,当我尝试在该列索引上调用 rs.getObject() 时,会出现以下错误:

因此,在涉及货币类型时,驱动程序似乎无法与自己的数据库对话。

这对我来说似乎是一个错误。

似乎 PG-JDBC,他们为此打开了一个错误

https://github.com/pgjdbc/pgjdbc/issues/100

但由于缺乏响应而不是修复它,他们关闭了它。

任何想法如何解决这个问题?

这真的是一个错误还是我错过了什么?

0 投票
1 回答
617 浏览

java - 为什么 setNetworkTimeout 会导致函数查询超时异常?

我有一个到 PostgreSQL 数据库的连接(使用 PostgreSQL JDBC 驱动程序),我在它上面设置了网络超时(使用setNetworkTimeout方法),这有点奇怪。

当我将连接用于简单查询(例如select * from table,这需要花费大量时间)时,它可以正常工作(等待查询返回结果)。但是,当我将连接用于使用函数(如select max(a) from table)的查询时,这也需要很多时间,它会由于超时而引发异常。

示例代码:

(忽略查询的逻辑。)

有人可以向我解释为什么会这样吗?

0 投票
1 回答
1410 浏览

postgresql - pgjdbc 中 prepareThreshold = 5 的好处是什么?

pgjdbcprepareThreshold中的定义如下:

在切换到使用服务器端准备好的语句之前,确定所需的 PreparedStatement 执行次数。默认值为五个,这意味着在第五次执行相同的 PreparedStatement 对象时开始使用服务器端准备好的语句。有关服务器端准备语句的更多信息,请参见“服务器准备语句”部分。

我想知道这实际上给我们带来了什么好处?大多数网络服务器几个月都不会重新启动,所以所有数据库查询最终都会发送超过 5 次,所以给它一周左右的时间,所有准备好的语句都将存储在服务器上,不是吗?这仅仅是为了使桌面应用程序受益吗?还是我错过了一些东西,比如“一段时间内的 5 个阈值”?

0 投票
2 回答
2716 浏览

postgresql - pgjdbc中的loginTimeout、connectTimeout和socketTimeout有什么区别

在 pgjdbc 我们有:

  • loginTimeout
  • connectTimeout
  • socketTimeout
  • cancelSignalTimeout

但我不清楚loginTimeout,connectTimeout和之间有什么区别(何时应用) socketTimeout

0 投票
1 回答
608 浏览

java - 无法在 AWS Lambda 中获取 Java 资源文件

我正在尝试在 PostgreSQL 和 AWS Lambda 之间配置 SSL 连接。问题是将 AWS 证书 PEM 文件传递​​给 pgjdbc。

我将 PEM 文件添加到我的资源文件夹中,并尝试通过以下方式获取它的位置:

它返回:

file:/var/task/rds-combined-ca-bundle.pem

但是,如果我将其作为sslrootcert属性传递,则会出现异常:

org.postgresql.util.PSQLException:无法打开 SSL 根证书文件文件:/var/task/rds-combined-ca-bundle.pem。

然后我决定运行一个代码,打印我的 Lambda 中的所有目录和文件名,盯着当前文件夹,然后我rds-combined-ca-bundle.pem在当前目录中获取文件。

从我的资源中获取 PEM 文件并将其传递给 pgjdbc 的正确方法是什么?