假設我有兩個數組字段在表中,如下所示:將PostgreSQL中的兩個數組合併爲索引和值?
Column | Type |
--------+-----------+
index | integer[] |
value | integer[] |
在哪裏都索引和值在長度上相等,並且在「索引」的值被保證是唯一的,例如:
SELECT * FROM ArrayTest;
index | value
-----------+-----------------------------------
{1,3,5,6} | {100, 103, 105, 106}
如何做一個查詢返回一個新的數組,其中'index'中的值用作數組索引,'value'中的值成爲與給定索引相關的值,即:
SELECT some_array_function(index, value) as newarray;
new_array
--------------------------------
{100, NULL, 103, NULL, 105, 106}
我想實現的是和PHP中的array_combine一樣。
這可以在PLPGSQL將可能完成。但是這種味道真的很糟糕(即糟糕的設計)你確定你需要在你的數據庫中做這樣一個令人費解的事情嗎? (順便說一句,只有當索引是整數時,才與'array_combine'相同) – leonbloy
我同意它有異味。這有點拼命嘗試優化讀取式應用程序。新陣列將存儲在物化視圖中,僅用於對數據進行某些分析,我認爲這種設計可能會改善目前的情況。 – simonfi
我有一個依賴於數組的功能的項目。 Postgres中只有很少的數組操作函數可用。我驚訝地發現,在一種情況下,使用PL/Python函數比等效的SQL更容易和更快。 –