#1 2018-06-28 09:40:59

philipp.eckert
Member
Registered: 2018-06-28

Nutzung von PosgreSQL-JSON-Funktionen

Guten Tag zusammen,

wir haben eine PostgreSQL-Datenbank, auf die wir mittels ReportServer zugreifen.

Die Datenbank enthält teilweise JSON-Strings als Inhalte, die wir gern mithilfe der entsprechenden spezifischen PostgreSQL-JSON-Funktionen (https://www.postgresql.org/docs/9.5/sta … -json.html) abfragen würden. Bei einem direkten Zugriff via JDBC-Treiber funktioniert das problems, in ReportServer erhält man allerdings eine Exception. Ist diese Art von Abfragesyntax nicht möglich?

Die Syntax sähe dann beispielsweise so aus:

select mr.creation_date, medication, 
prescriptions->>'name' as name,
prescriptions->>'quantities' as quantities
from module_report mr, jsonb_array_elements(mr.medication::jsonb#>'{prescriptions}') prescriptions
order by mr.medication desc

Beste Grüße
Philipp

Offline

#2 2018-06-28 09:43:53

eduardo
Administrator
Registered: 2016-11-01
Website

Re: Nutzung von PosgreSQL-JSON-Funktionen

Hallo Philipp,

welche ReportServer Version genau verwendest du (rsversion.properties) ?

Viele Grüße
Eduardo

Offline

#3 2018-06-29 06:47:33

philipp.eckert
Member
Registered: 2018-06-28

Re: Nutzung von PosgreSQL-JSON-Funktionen

Hallo Eduardo,

wir nutzen die folgende Version:

Enterprise Edition
RS3.0.3-6002
2017-12-09-12-26-19

Folgende Exception erhalten wir:

net.datenwerke.gxtdto.client.servercommunication.exceptions.ServerCallFailedException: Query could not be executed: ERROR: invalid input syntax for type json<br>  Detail: The input string ended unexpectedly.<br>  Wobei: JSON data, line 1: <br>	at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadData(TableReportUtilityServiceImpl.java:330)<br>	at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>	at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>	at sun.reflect.GeneratedMethodAccessor778.invoke(Unknown Source)<br>	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>	at java.lang.reflect.Method.invoke(Method.java:498)<br>	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587)<br>	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)<br>	at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>	at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)<br>	at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>	at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)<br>	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)<br>	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)<br>	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)<br>	at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>	at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>	at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)<br>	at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)<br>	at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)<br>	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)<br>	at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:89)<br>	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)<br>	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)<br>	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)<br>	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)<br>	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)<br>	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)<br>	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)<br>	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)<br>	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)<br>	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)<br>	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)<br>	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)<br>	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)<br>	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)<br>	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)<br>	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)<br>	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)<br>	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)<br>	at org.apache.coyote.ajp.AbstractAjpProcessor.process(AbstractAjpProcessor.java:877)<br>	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)<br>	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2527)<br>	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2516)<br>	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)<br>	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)<br>	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)<br>	at java.lang.Thread.run(Thread.java:748)<br>Caused by: net.datenwerke.rs.core.service.reportmanager.exceptions.ReportExecutorException: Query could not be executed: ERROR: invalid input syntax for type json<br>  Detail: The input string ended unexpectedly.<br>  Wobei: JSON data, line 1: <br>	at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:325)<br>	at net.datenwerke.rs.base.service.reportengines.table.SimpleDataSupplier.getData(SimpleDataSupplier.java:430)<br>	at net.datenwerke.rs.base.service.reportengines.table.SimpleDataSupplier.getData(SimpleDataSupplier.java:422)<br>	at net.datenwerke.rs.base.service.reportengines.table.SimpleDataSupplier.getData(SimpleDataSupplier.java:154)<br>	at net.datenwerke.rs.base.service.reportengines.table.SimpleDataSupplier.getData(SimpleDataSupplier.java:124)<br>	at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadData(TableReportUtilityServiceImpl.java:321)<br>	... 49 more<br>Caused by: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type json<br>  Detail: The input string ended unexpectedly.<br>  Wobei: JSON data, line 1: <br>	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2284)<br>	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2003)<br>	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200)<br>	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)<br>	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161)<br>	at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114)<br>	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1418)<br>	at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:304)<br>	... 54 more<br>

Offline

#4 2018-06-29 06:54:10

eduardo
Administrator
Registered: 2016-11-01
Website

Re: Nutzung von PosgreSQL-JSON-Funktionen

Hallo Philipp,

danke für die Infos.
Kannst du mir bitte noch die Tabellendefinition (DDL) deiner Tabelle und einen Datensatz dieser Tabelle schicken ? Es scheint etwas mit einem Zeichen nähe "wobei" zu tun: "<br>  Wobei: JSON data, line 1:"

Erstellst du eine dynamische Liste oder wie verwendest du die Query ?

Viele Grüße
Eduardo

Offline

#5 2018-06-30 09:36:45

philipp.eckert
Member
Registered: 2018-06-28

Re: Nutzung von PosgreSQL-JSON-Funktionen

Hallo Eduardo,

wir haben den Fehler gefunden, wir hatten die Query versehentlich in alter SQL-Manier mit einem Semikolon abgeschlossen, ohne ließ sie sich korrekt abschicken.

Danke für die Hilfe.
Philipp

Offline

Board footer

Powered by FluxBB