问题标签 [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.
java - 从 PostgreSQL 读取单列时出现 OutOfMemoryError
我正在尝试从本地安装的 PostgreSQL 10.3 中的一张表中读取其中一列
我运行带有-verbose:gc -Xmx512M
VM 选项的程序。项目只有依赖:org.postgresql:postgresql:42.2.1
而且我总是收到OOM错误:
有什么办法可以避免OOM?
postgresql - 缓存计划不得更改结果类型
当我修改列的长度或在表中添加新列时,我们的服务团队有时会收到错误缓存计划不能更改结果类型。
我尝试了 Stack Overflow 上提到的解决方案,例如Postgres:“错误:缓存计划不能更改结果类型”
我已尝试autosave=conservative
解决此问题,但仍然可以重现此问题。我在下面使用了 JDBC 连接字符串
为什么这个属性在我的情况下不起作用?
此外,我测试过prepareThreshold=0
它的工作正常。但我认为它会影响性能,因为它永远不会使用客户端准备好的语句。
我只想知道避免此错误的最佳解决方案。
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 是什么。请建议我一个连接字符串,这个问题就解决了。
谢谢
非常感谢您要求我发布错误消息:
这是源代码:
postgresql - postgresql 逻辑复制流失败并显示“从副本读取时数据库连接失败”
嗨,我正在无限循环中连续读取逻辑复制流。我有另一个程序不断填充同一个数据库中的表。我注意到一段时间后(大约 5-10 分钟)。我总是得到例外
这是我的示例程序:
}
任何帮助表示赞赏!我正在使用 postgres JDBC 驱动程序 42.2.2。
postgresql - pgjdbc-ng 格式错误的区域:
目前我正在尝试制作一个模块,该模块将通过 Postgres 上的触发器监听任何更改。我正在使用 pgjdbc-ng ver 0.8.2,从 maven repo central 下载 JAR 并将其添加为项目参考。
以下是我使用的代码:
运行后,我得到了异常:
病态区域:印度尼西亚 [在索引 0]
我已经阅读了官方的 git,说它应该在某个版本号内修复。
我如何应用这些修复?
谢谢
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.00
or say 1,312,536.00
。
因此,当我尝试在该列索引上调用 rs.getObject() 时,会出现以下错误:
因此,在涉及货币类型时,驱动程序似乎无法与自己的数据库对话。
这对我来说似乎是一个错误。
似乎 PG-JDBC,他们为此打开了一个错误
https://github.com/pgjdbc/pgjdbc/issues/100
但由于缺乏响应而不是修复它,他们关闭了它。
任何想法如何解决这个问题?
这真的是一个错误还是我错过了什么?
java - 为什么 setNetworkTimeout 会导致函数查询超时异常?
我有一个到 PostgreSQL 数据库的连接(使用 PostgreSQL JDBC 驱动程序),我在它上面设置了网络超时(使用setNetworkTimeout
方法),这有点奇怪。
当我将连接用于简单查询(例如select * from table
,这需要花费大量时间)时,它可以正常工作(等待查询返回结果)。但是,当我将连接用于使用函数(如select max(a) from table
)的查询时,这也需要很多时间,它会由于超时而引发异常。
示例代码:
(忽略查询的逻辑。)
有人可以向我解释为什么会这样吗?
postgresql - pgjdbc 中 prepareThreshold = 5 的好处是什么?
pgjdbcprepareThreshold
中的定义如下:
在切换到使用服务器端准备好的语句之前,确定所需的 PreparedStatement 执行次数。默认值为五个,这意味着在第五次执行相同的 PreparedStatement 对象时开始使用服务器端准备好的语句。有关服务器端准备语句的更多信息,请参见“服务器准备语句”部分。
我想知道这实际上给我们带来了什么好处?大多数网络服务器几个月都不会重新启动,所以所有数据库查询最终都会发送超过 5 次,所以给它一周左右的时间,所有准备好的语句都将存储在服务器上,不是吗?这仅仅是为了使桌面应用程序受益吗?还是我错过了一些东西,比如“一段时间内的 5 个阈值”?
postgresql - pgjdbc中的loginTimeout、connectTimeout和socketTimeout有什么区别
在 pgjdbc 我们有:
loginTimeout
connectTimeout
socketTimeout
cancelSignalTimeout
但我不清楚loginTimeout
,connectTimeout
和之间有什么区别(何时应用) socketTimeout
。
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 的正确方法是什么?