2015-02-07 121 views
0

我有这样的SQL查询:如何通过postgresql将值插入到json数组中?

SELECT array_to_json(array_agg(row_to_json(t))) 
FROM (SELECT rendered_json, city_id FROM hotels WHERE id IN (1)) as t 

和执行后,我得到:

"[{rendered_json:{address:Den Texstraat 16,city:Amsterdam,hotel_class:2, 
currencycode:EUR,hotel_id:10003,hoteltype_id:14,latitude:52.3588347328288, 
longitude:4.89386737346649,name:Asterisk Hotel,review_score:7.4,min_price:0.0}, 
city_id:-2140479}]" 

,但我想删除该字段rendered_json并获得

"[{address:Den Texstraat 16,city:Amsterdam,hotel_class:2, 
currencycode:EUR,hotel_id:10003,hoteltype_id:14,latitude:52.3588347328288, 
longitude:4.89386737346649,name:Asterisk Hotel,review_score:7.4,min_price:0.0, 
city_id:-2140479}]" 

如果我的查询:

SELECT array_to_json(array_agg(row_to_json(t)::json->'rendered_json')) 
FROM (SELECT rendered_json, city_id FROM hotels WHERE id IN (1)) as t 

然后我输了场city_id

如何为我的需求构建查询?可能吗?

在此先感谢

回答

0

我建议rendered_json是多余的,不灵活。它会随着行更新而过时,或者你有很多触发器会减慢更新和插入。而不是试图修改它,这似乎会打败它的缓存点,摆脱它(或忽略它)并自己构建JSON。

SELECT row_to_json(hotel_data) 
FROM (
    SELECT address, city, hotel_class, currencycode, hotel_id, 
      hoteltype_id, latitude, longitude, name, review_score, 
      min_price, city_id 
    FROM hotels 
    WHERE id = 1 
) as hotel_data 

(我的任何语法错误道歉,我没有PG方便进行测试)

如果产生这种昂贵得,做正常的查询优化,如果不工作consider a query cache

+0

谢谢。这是作品!但写得太多......其实''rendered_json'里面有更多的字段(我在创建问题的时候剪掉了) – 2015-02-08 07:39:57

+0

@DmitryKrakosevich如果你不止一次地写它,它只会写太多。如果你不止一次地写它,写一个程序为你做。 – Schwern 2015-02-08 18:02:30

相关问题