2014-12-29 59 views
1

我在本地開發環境中編寫了以下查詢,但沒有意識到我的本地dev上的postgres版本是9.3+,但只有9.1生產。我對升級生產postgres猶豫不決。有什麼辦法可以編寫與9.1兼容的以下查詢?我相信row_to_json是問題所在。有9.1相當於?模式是SalesOrders有許多SalesOrderItems。每個SalesOrderItem都有很多mdns。在9.3上運行時,下面給出了一個很好的緊湊嵌套JSON對象。row_to_json on postgres 9.1

select row_to_json(t) 
    from (select s.*,   
    (select array_to_json(array_agg(row_to_json(d)))   
     from (select soi.* , (select array_to_json(array_agg(row_to_json(e))) 
     from(select m.* FROM "Mdns" m where m."SalesOrderItemId" = soi.id) e) mdns    
      from "SalesOrderItems" soi where soi."SalesOrderId" =s.id) d    
      ) as order_items  
    from "SalesOrders" s  where s.order_id = 'SO-83562-0185') t 
+0

對不起,但json和相關函數在9.2以後的postgresql中: https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.2 –

+0

是否可以編寫這些函數?他們的代碼是在哪裏列出的? – user1175817

+0

順便說一句,'array_to_json(array_agg(row_to_json(d)))'中的'row_to_json'是多餘的。它在沒有這個調用的情況下做你想要的:'array_to_json(array_agg(d))'。 – jpmc26

回答

2

9.2的json函數有一個backport到9.1 available as an extension called json91

但是,總的來說,針對較新版本的數據庫進行開發比在生產環境中開發還糟糕。你會一直有這樣的問題。

如果你想使用json功能,你需要計劃升級到9.4;每個版本都支持PostgreSQL的json支持。

相關問題