2012-02-12 1 views
3

PostgreSQL 트리거를 시작하기 전에 다음이 가능한지 궁금합니다. 열에 이미지 파일에 대한 파일 시스템 경로가 저장된 테이블이 있습니다. 예를 들어, 각 레코드의 "img_path"필드에는 "c : \ images \ a_great_image.jpg"또는 이와 비슷한 내용이 포함될 수 있습니다.파일 시스템에서 파일을 이동시키는 PostgreSQL 트리거

데이터베이스 사용자가 해당 필드의 값을 변경하면 postgresql 트리거 기능으로 파일을 새로 지정한 위치로 "이동"할 수 있습니까?

많은 조언을 주셔서 감사합니다.

+1

네, 그렇게 할 수는 있지만 트랜잭션은 데이터베이스 내의 데이터로 작업 할 때만 가능합니다. 즉 파일이 파일 시스템에있는 것이므로 어떤 이유로 실패하면 다시 롤백 할 수 없습니다. 명심할 것. – Kuberchaun

답변

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

+1

move_file이 false를 반환하면 예외를 발생시킬 수 있습니다. – iddqd

관련 문제