2012-11-18 32 views
1

我有一个Postgresql 9.1表,其中包含列“城市”,“admin1”和“国家”。我想选择输出格式为“city,admin1,country”的唯一值。curl中的postgresql查询

我可能在纽约和明尼苏达州的罗切斯特有多个条目,但我只希望每个条目都有。这是填充弹性搜索索引,我使用的JDBC river plugin

以下SELECT做什么,我想在PGAdmin3的SQL编辑器:

SELECT city || ', ' || admin1 || ', ' || country AS city FROM table GROUP BY city, admin1, country; 

,但在以下

curl -XPUT 'localhost:9200/_river/nibbel_river/_meta' -d '{ 

      "type" : "jdbc", 
      "jdbc" : { 
       "driver" : "org.postgresql.Driver", 
       "url" : "jdbc:postgresql://localhost:5432/table", 
       "user" : "", 
       "password" : "", 
      "sql" : "SELECT city || ', ' || admin1 || ', ' || country AS city FROM everything GROUP BY city, admin1, country", 
      "poll" : "7d" 
      }, 
      "index" : { 
       "index" : "city", 
       "type" : "everything" 
      } 
     }' 

与失败错误

curl: (6) Couldn't resolve host ' || admin1 || ,' 
curl: (3) [globbing] unmatched close brace/bracket at pos 102 
{"error":"MapperParsingException[Failed to parse [jdbc.sql]]; nested: JsonParseException[Unexpected end-of-input in VALUE_STRING\n at [Source: [[email protected]; line: 8, column: 565]]; ","status":400} 

这是什么语法?

回答

5

在查询所有的撇号必须逃脱这样的:'\''例如:

curl -XPUT 'localhost:9200/_river/nibbel_river/_meta' -d '{ 
    "type" : "jdbc", 
    "jdbc" : { 
     "driver" : "org.postgresql.Driver", 
     "url" : "jdbc:postgresql://localhost:5432/table", 
     "user" : "", 
     "password" : "", 
     "sql" : "SELECT city || '\'', '\'' || admin1 || '\'', '\'' || country AS city FROM everything GROUP BY city, admin1, country", 
     "poll" : "7d" 
    }, 
    "index" : { 
     "index" : "city", 
     "type" : "everything" 
    } 
}' 
+0

就是这样,谢谢。我试图用'唯一'逃脱。 – Dave