2012-02-12 59 views
3

剛開始接觸的PostgreSQL觸發一個文件,我想知道如果以下是可能的: 我有一個表,其中一列中存儲的文件系統路徑的圖像文件。例如,每個記錄的「img_path」字段可能包含諸如「c:\ images \ a_great_image.jpg」之類的東西,或類似的東西。PostgreSQL的觸發器,移動文件系統上的

當數據庫用戶在該領域的變化值,是有可能,在PostgreSQL觸發器功能可以照顧(至少嘗試),以「移動」該文件將其新指定的位置?

非常感謝您的建議。

+1

是的,你可以做到這一點,但要記住只有在數據庫中使用數據時才能進行事務處理。也就是說文件在文件系統上,所以如果由於某種原因失敗了,你就無法回滾它。只是要記住。 – Kuberchaun 2012-02-12 23:44:43

回答

2

是的。這是可能的。以plpython爲例。在觸發器中使用它。

CREATE OR REPLACE FUNCTION move_file(old_path text, new_path text) 
RETURNS boolean AS 
$$ 
    import shutil 
    try: 
     shutil.move(old_path, new_path) 
     return True 
    except: 
     return False 
$$ 
    LANGUAGE 'plpythonu' VOLATILE; 
+0

謝謝你這個優秀的例子。正如JustBob如上所述,交易仍然會犯,即使該函數返回false,是否正確?基於觸發器功能的結果是否有某種回滾方式?謝謝! – Joebocop 2012-02-13 06:48:41

+1

當move_file返回false時,可以引發異常。 – iddqd 2012-02-14 12:57:56