2012-06-15 63 views
1

postgres 9.2支持json列。根據json表將postgres自動索引的最佳方式是什麼。將postgresql擴展到索引json對象的最佳方式是什麼?

例如,

create table obj(
    obj_id bigserial primary key, 
    col1  varchar(20), 
    col2  date, 
    obj  json 
); 
create index obj_col1 on obj(col1); 
create index obj_col2 on obj(col2); 

記錄時插入或更新,col1col2obj列設置。

基本上規則是任何屬性,除了主鍵和json列本身,都是從json對象自動設置的。

爲correllary,重命名col1也將更新json屬性,重命名col1有新的名稱。

可以使用catalogueexecute陳述來完成,但是會像罪一樣緩慢。

可以通過爲每個表創建觸發器來完成,但這既煩瑣又容易出錯。

不能通過繼承來完成,因爲觸發器不能被繼承。

extension最好的方法嗎?它甚至會是什麼樣子?


最終不能寫extension要做到這一點,因爲皮克不支持在CREATE TABLE或ALTER TABLE觸發器。

對於kludge的唯一建議是記錄DDL,監視日誌,然後運行一個過程。雖然這可以完成,但我們真正需要的是CREATE和ALTER TABLE上的觸發器。

+1

這可能有幫助:http://people.planetpostgresql.org/andrew/index.php?/archives/249-Using-PLV8-to-index-JSON.html –

+0

好的鏈接 - 謝謝! –

回答

1

我不清楚你是如何從你的json中派生出「col1」的。推測這取決於你的json。

無論如何 - 最好的方法是編寫一個爲您寫觸發器的腳本,另一個爲您編寫列重命名操作。你提供任何必要的參數,並且它會吐出plpgsql代碼。

噢 - 你也許會發現http://pgtap.org/也有用 - 你會想測試所有這些。

相關問題