2012-12-03 18 views
0

postgres(和greenplum)中的用戶定義函數是否獨立運行? 當我用plpythonu用戶定義的函數進行查詢時,會打開多少個執行環境? 運行查詢時是否有共享的Python解釋器狀態?查詢中打開了多少個plpython執行環境?

說我有一個plpython用戶定義的函數:

CREATE OR REPLACE FUNCTION file2text(path string) RETURNS text AS $$ 
    f = open(path, 'r') 
    return f.read() 
    f.close() 
$$ LANGUAGE plpythonu; 

對於表create table files (name varchar, path varchar)並在該表中查詢,如下所示:

SELECT f.name 
FROM files f 
WHERE character_length(file2text(f.path)) > 4096 
ORDER BY f.name 

是一個新的Python環境催生的每個執行我的plpython函數? 在MPP數據庫中,我是否可以假設postgres的行爲在每個細分受衆羣之間沒有共享狀態的情況下是重複的?

回答

1

PL/Python的狀態會話之間隔離,並且在一個會話內共享。

通過在您導入的自定義模塊中將變量放置在sys模塊(僅用於測試!)或更好的模塊中,您可以非常容易地進行測試。您應該看到該變量對在同一會話(連接)內運行的其他函數可見,但對其他會話中的函數不可見。