问题
- Postgresql : 9.3.2
- Elasticsearch : 0.90
- jprante/elasticsearch-river-jdbc : 2.2.2
- postgresql JDBC : 9.3-1100 JDBC 41
I'm trying to get a postgresql Json data type column into elasticsearch, using the elasticsearch river.
Here the created river
curl -XPUT 'localhost:9200/_river/business_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "org.postgresql.Driver",
"url" : "jdbc:postgresql://localhost:5432/business",
"user" : "postgres",
"password" : "",
"sql" : "select id, active, companies->'sic'->>'national_number' AS sic, companies->'names'->>'name' AS name, companies->'address'->>'country' AS country from businesses.business",
"index" : "business",
"type" : "jdbc"
}
}'
The river complains that the "names" column doesn't exist !!! the query works in Postgresql which leads me to think that the Json data type is not yet supported by JDBC or the river.
Here the full message
[2014-01-13 07:47:27,919][INFO ][org.xbib.elasticsearch.river.jdbc.JDBCRiver] [Brigade] [jdbc][business_river] starting JDBC river: URL [jdbc:postgresql://localhost:5432/business], driver [org.postgresql.Driver], strategy [oneshot], index [jdbc]/[jdbc]
[2014-01-13 07:47:33,281][ERROR][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] ERROR: column "names" does not exist
Position: 31
org.postgresql.util.PSQLException: ERROR: column "names" does not exist
Position: 31
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283)
at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.executeQuery(SimpleRiverSource.java:417)
at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:241)
at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.move(SimpleRiverFlow.java:184)
at org.xbib.elasticsearch.river.jdbc.strategy.oneshot.OneShotRiverFlow.run(OneShotRiverFlow.java:38)
at java.lang.Thread.run(Thread.java:744)
回答1:
Thanks to Craig Ringer who pointed me to the real problem, I rewrited my river, replacing the simple quotes in the postgresql json query with "\u0027", and now it works just fine
来源:https://stackoverflow.com/questions/21081196/jdbc-elasticsearch-and-postgresql-json-data-type