제가 linux,jboss에 postgres를 사용하며 공부중인대여...
db에 largeObject를 저장하면 oid를 얻어와서 지정한 컬럼에 oid를 저장하는데여
그 oid를 가지고 있는 row를 삭제하면
db에 저장되어있는 largeObject는 자동으로 삭제가 되나여
아니면 따로 largeObject를 삭제해야 하는건가여???
6.x 이후 large object 놈을 쓸 일이 없어서 관심이 없었는데, 궁금해서 한번 살펴보니까, 6.x 대의 lo 처리 방식이랑 완전히 딴판으로 움직이고 있었네요. :)
아무튼 7.3.x 대 버전을 기준으로 이야기하면,
결론부터 이야기하면, lo 지정한 테이블에서 해당 로우를 지운다고 lo 자체가 지워지지는 않네요.
자동으로 처리를 하려면, 트리거가 있어야할 듯 싶습니다.
트리거처럼 섬세한 작업이 필요없다면,
CREATE RULE r_unlink_lo AS ON DELETE TO worktable DO SELECT lo_unlink(old.loid_column)
위와 같이 rule을 하나 만들어두셔도 되고요.
그리고, 디비 서버가 돌아가고 있는 시스템의 물리적인 하드디스크 공간 관리를 위한 삭제라면, vacuum도 꼭 필요할 것같네요.
자동으로 삭제 되지 않는 이유가 아마 large object를 표한기 위한 자료형이 oid인데, oid 라는 자료형 만으로는 그놈이 large object인지, 아닌지를 판단할 수가 없어서 그런 것같습니다.