问题标签 [jdbc-postgres]
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 - 使用列表参数将 HQL 查询转换为可执行的 SQL 查询
我正在编写一个实用函数来根据我传入的任何 HQL 获取总记录数,而无需加载所有数据。传入的 HQL 可能非常复杂,有很多选择、连接、条件、分组和排序。为此,我想用SELECT COUNT(*) FROM (<ORIGINAL_QUERY>) x
. 我发现,这对于 HQL 是不可能的,因为 Hibernate 不允许 FROM 元素中的子查询。现在,我正在尝试将这个可能具有一些命名参数(其中一些可能是简单参数,一些可能是列表)的随机 HQL 查询转换为可执行的 SQL 语句,而无需内联参数值。这似乎适用于简单参数,但不适用于列表参数。
hqlString 和 namedParameterMap 来自外部某处:
将 HQL 转换为 SQL 的代码(和 ParameterTranslations:
创建 SQLQuery、设置参数并执行查询的代码:
此查询按预期工作:
此查询不起作用:
例外:
org.hibernate.exception.SQLGrammarException:无法在 org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 的 org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106) 处提取 ResultSet在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) 在 org.hibernate.engine.jdbc 的 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) .internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79) 在 org.hibernate.loader.Loader.getResultSet(Loader.java:2313) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2096) 在 org. hibernate.loader.Loader.executeQueryStatement(Loader.java:2072) at org.hibernate.loader.Loader.doQuery(Loader.java:941) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:352) at org.hibernate.loader.Loader.doList(Loader.java:2813) at org.hibernate.loader.Loader.doList(Loader.java:2796) at org .hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2625) 在 org.hibernate.loader.Loader.list(Loader.java:2620) 在 org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:322 ) 在 org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1996) 在 org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java: 125) 在 org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)352) 在 org.hibernate.loader.Loader.doList(Loader.java:2813) 在 org.hibernate.loader.Loader.doList(Loader.java:2796) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java :2625) org.hibernate.loader.Loader.list(Loader.java:2620) org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:322) org.hibernate.internal.SessionImpl.listCustomQuery( SessionImpl.java:1996) 在 org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate.internal.AbstractQueryImpl.uniqueResult (AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)352) 在 org.hibernate.loader.Loader.doList(Loader.java:2813) 在 org.hibernate.loader.Loader.doList(Loader.java:2796) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java :2625) org.hibernate.loader.Loader.list(Loader.java:2620) org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:322) org.hibernate.internal.SessionImpl.listCustomQuery( SessionImpl.java:1996) 在 org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate.internal.AbstractQueryImpl.uniqueResult (AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)listIgnoreQueryCache(Loader.java:2625) at org.hibernate.loader.Loader.list(Loader.java:2620) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:322) at org.hibernate.internal .SessionImpl.listCustomQuery(SessionImpl.java:1996) 在 org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate。 internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)listIgnoreQueryCache(Loader.java:2625) at org.hibernate.loader.Loader.list(Loader.java:2620) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:322) at org.hibernate.internal .SessionImpl.listCustomQuery(SessionImpl.java:1996) 在 org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate。 internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)322) 在 org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) 在 org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:966) 在 HQLQueryUtils.getCount(HQLQueryUtils.java:350)
原因:org.postgresql.util.PSQLException:错误:运算符不存在:整数 = bytea 提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。位置: org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178) org.postgresql.core.v3 的 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433) 的 301。在 org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) 在 org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) 在 org.postgresql.jdbc 的 QueryExecutorImpl.execute(QueryExecutorImpl.java:306) .PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155) 在 org.hibernate.engine.jdbc 的 org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:118)。
环境:
- 爪哇 8
- 休眠 5.1.8
- Postgres-JDBC 42.2.2
- PostgreSQL 服务器 10.5
scala - Scala Slick:无法在查询中获取参数
我刚刚在这上面花了几个小时。我试图通过 Scala 中的 Slick 在 PostgreSQL 中进行非常复杂的查询,但 Slick 永远不会考虑我的任何参数。如果我尝试一些简单的事情:
输出将是:
相反,我尝试文字插入:
输出将是:
Slick 总是会在任何文字参数周围添加逗号,无论它放在哪里,即使它是查询中的唯一参数,如:
现在,我想要做更复杂的查询,在 Postgres 中进行计算和函数调用。但鉴于 Slick 不允许我使用我的任何变量,我无处可去。
我尝试设置各种隐式,一些扩展GetResult
一些扩展StatementParameters
,Slick 似乎忽略了所有它们,要么用逗号替换我的参数,要么?
用逗号包围它们,从而使我的所有查询都无效。我想补充一点,这#$
不是很好,因为它不提供消毒。我想坚持使用 Slick,因为它是异步的,但我不确定从这里去哪里。
这些是我的版本号,根据build.sbt
:
我究竟做错了什么?
postgresql - Migrate PostgreSQL text/bytea column to large object?
I've got a table (10k rows) that stores large values in a text
column. The current largest is 417 MB uncompressed (85 MB toasted). The flaw in this design is that it's not possible to stream these values (e.g. over JDBC) - anything using this column must read the whole thing into memory.
Are there any tools or shortcuts available to migrate this column to large objects? Minimising the working disk and memory required.
I'll be using lo_compat_privileges
if that make any difference.
java - JDBCIO 调用以自定义对象类型为参数的 Postgres 例程(存储过程)
我正在尝试调用一个将自定义对象类型作为参数的 Postgres 例程。
我的例程(存储过程):
然后我尝试创建一个 Java 类来表示自定义类型:
然后我尝试执行这样的代码:
不幸的是,这给了我一个例外:
任何帮助都会很棒。
ibm-cloud - IBMCloud - 通过 JDBC 连接到 PostgreSQL DB(启用 SSL)
我正在尝试使用 Java(启用 SSL)连接到 IBM Cloud PostgreSQL DB。但是在建立连接时,我收到以下错误 -
我已按照文档 - https://cloud.ibm.com/docs/services/databases-for-postgresql?topic=databases-for-postgresql-external-app&locale=de创建 ssl 证书
postgresql - 无法通过 Apache Tomcat 连接到 Postgres DB?
我正在尝试设置 Geoportal 1.2.4,在 Apache Tomcat 8.5.6、Postgres 9.0.6_1、JDK 6 和 jdbc(postgresql-9.1-901.jdbc4.jar) 上运行。我无法登录到 Geoportal,当我使用管理员详细信息 () 登录时,我收到此错误“发生数据库通信错误”检查 Apache 日志文件,我看到有一个严重错误
我在 jdbc 的配置中尝试了一系列不同的条目,但它总是回到那个错误。
这只是我最近的尝试。我在网上看到了关于 url 应该是什么样子的相互矛盾的帖子。我仔细检查了其余的配置文件,其中的编辑很少,可能对错误没有影响。如果有人能指出我的错误,将不胜感激。
hibernate - 为什么Hibernate偶尔会在persist中执行select currval?
有时,Hibernate 在持久化操作期间似乎随机执行查询:
实体:
代码:
生成的sql:
但通常select currval
不执行。对此有什么解释吗?
顺便说一句,我的问题与此非常相似,但问题中的解决方案对我不起作用。
笔记:
My_TABLE_NAME ddl sql:
休眠属性:
- PostgreSQL 版本:11.5。
- hibernate.dialect:org.hibernate.dialect.PostgreSQL9Dialect
- 休眠版本:5.4.5.Final
- PostgreSQL JDBC 驱动程序:postgresql-9.4
postgresql - 当数据包含日文字符时,无法使用 org.postgresql.copy.CopyManager 插入数据库
在过去的几个小时里,我一直在努力弄清楚我的代码出了什么问题。这段代码一切正常,直到我收到一个包含日文字符的文件。Notepad++ 甚至一些在线实用工具都说文件的编码是UTF-8。记事本说它的UTF-8-BOM。我已经从文件中读取了我的数据并对其进行了处理,最后想将其写入数据库。
我收到错误 org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0xee My database encoding is UTF8 only..
spring-cloud-dataflow - 在 SCDF 仪表板中启动任务时违反“task_metadata_fk”中的外键约束
我正在尝试使用 SCDF 仪表板启动任务。
我使用 CockroachDB 作为底层持久层和 Hibernate ORM 版本 5.4.22.Final,SCDF 的 2.7.0 版本以及 2.8.0-SNAPSHOT 都支持它。
我能够使用 jar 的文件 URI 创建应用程序,并且能够创建任务。当我尝试使用程序参数启动任务时,我在 SCDF 服务器的控制台输出中收到此异常:
查看“task_execution”表,我确实看到了任务及其执行 ID。所以在我看来,这里可能存在一些时间问题,其中插入到“task_execution_metadata”中是在插入到“task_execution”表之前执行的。
这发生在 2.7.0 和 2.8.0-SNAPSHOT 上。任何有关为什么会发生这种情况的帮助将不胜感激。
编辑:
在调试了更多之后,我得出的结论是,这要么是 postgresql 驱动程序发送查询的方式中的错误,要么是 CockroachDB 解释查询的方式。
在 CockroachDB 节点上的请求日志中,我可以看到查询以正确的顺序出现:
从上面的日志可以看到postgresql驱动程序INSERT INTO task_execution_metadata(id, task_execution_id, task_execution_manifest) VALUES ($1, $2, $3)"› ‹{$1:"13", $2:"14", $3:"<BLAHBLAH>"}>
在任务进入任务表后发送参数化查询。我认为 CockroachDB 将参数化任务 id 解释为字符串而不是长字符串,然后抛出外键约束违规。
因此,这要么是驱动程序发送无效查询的情况,要么是数据库错误地解释查询的情况。我认为是后者,我会在 CockroachDB 的论坛上开一个帖子