Teldrive, 데이터베이스 마이그레이션 오류
DB 마이그레이션 작업을 동반하는 업데이트
Teldrive 업데이트할 때 [Important]라는 알림이 있는 것은 주의해서 업데이트해야 한다. 왜냐하면 ‘Important’ 알림이 있는 업데이트는 데이터베이스 마이그레이션 작업을 동반하는 경우가 왕왕 있기 때문이다. 고로 업데이트 작업 전에 반드시 DB를 백업하자!!! 가능하다면, 테스트용 PostgreSQL 서버나 테스트용 DB를 생성해 업데이트 예행연습을 하는 것도 좋다.
나 같은 경우 Teldrive DB 서버는 오라클 무료 VPS로 구동 중인데, 업데이트 테스트는 로컬 PC에서 수행해 보고 나서 오라클 서버에 적용한다.
Teldrive, 중복 데이터 확인 및 삭제
failed to migrate database {"err": "ERROR 20250125123315_index.sql: failed to run SQL migration: failed to execute SQL query \"DROP INDEX IF EXISTS teldrive.idx_files_unique_folder;\\nCREATE UNIQUE INDEX unique_file_idx ON teldrive.files \\n(name, COALESCE(parent_id, '00000000-0000-0000-0000-000000000000'::uuid), user_id) WHERE status = 'active';\": ERROR: could not create unique index \"unique_file_idx\" (SQLSTATE 23505)"}
1.6.9 버전의 주요 업데이트 내용은 중복파일 금지다. 그래서 그런지 Teldrive에 중복파일이 있으면 1.6.9 버전을 처음 실행했을 때의 데이터베이스 마이그레이션 과정에서 위와 같은 오류를 생성한다. 물론 이렇게 자신 있게 말할 수 있는 것은 이미 해결 방법을 알았기 때문이다.
데이터베이스의 ‘데’자도 모르고, SQL의 ‘S’자도 모르는 나로선 만리장성처럼 구불구불하고 긴 오류를 분석하는 시도조차 못 하는데, 문제 해결은 당연히 불가능이다. 예전 같으면 기껏해야 ‘SQLSTATE 23505’라는 에러 코드가 ‘동일 데이터가 이미 존재하여 발생한 에러’라는 구글 검색 정도로 만족하고 말았을 것인데, 이제는 AI에게 도움을 요청할 수 있는 시대다.
위 사진 좌측은 GPT, 우측은 딥시크(DeepSeek)가 제시한 해결 방법이다.
‘오류를 분석해 주세요’라고만 질의했는데, 딥시크는 친절하게 해결 방법(문제를 해결할 수 있는 SQL 스크립트)까지 제시했고, GPT는 말 그대로 오류만 정확하게 분석했다. 물론 GPT에게 문제를 해결할 수 있는 SQL 스크립트 구문을 작성해달라고 하면 딥시크와 비슷한 결과물을 얻을 수 있다. 여기서 알 수 있듯 딥시크는 질문한 것 외에 추가 설명을 곁들여 장황하게 설명하는 경향이 있고, GPT는 사용자 질의에만 집중해 핵심만 추려내는 경향이 있다.
아무튼, 예전 같으면 이런 수준의 세세한 답변을 얻으려면 관련 전문가들이 활동하는 커뮤니티에 질문을 구걸하듯 올리고 누군가가 발 벗고 나서 스크립트를 작성해 줘야 할 때까지 무한정 기다려야 했다. 정말 세상 아주 좋아졌다.
SELECT name, parent_id, user_id, COUNT(*)
FROM teldrive.files
WHERE status = 'active'
GROUP BY name, parent_id, user_id
HAVING COUNT(*) > 1;일단 딥시크가 제시한 중복 데이터 확인 SQL 스크립트를 실행해 중복 데이터가 얼마나 있는지 확인해 보자. 어제는 DBeaver를 사용했지만, 오늘은 pgAdmin 도구의 Query Tool을 사용했다.
count 열에 있는 숫자가 중복 값을 보여주는 것 같은데, 꽤 많은 중복 데이터가 존재함을 알 수 있다.
DELETE FROM teldrive.files
WHERE id IN (
SELECT id
FROM (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY name, parent_id, user_id ORDER BY id) AS rn
FROM teldrive.files
WHERE status = 'active'
) t
WHERE t.rn > 1
);이제 딥시크가 제시한 1개만 남기고 나머지 중복파일은 삭제하는 스크립트를 실행해 보자.
사진 좌측을 보면 총 71개의 중복파일이 제거된 것을 알 수 있다. 중복 데이터 확인 스크립트를 다시 실행해 보면 아무것도 나오지 않는다(사진 우측).
참고로 딥시크는 여기서 한발 더 나아가, "인덱스 생성 재시도: 중복 데이터를 처리한 후, 다시 마이그레이션을 실행하여 고유 인덱스를 생성합니다"라는, 또 다른 SQL 스크립트를 제시했는데, 이것은 실행하면 안 된다. 처음엔 멋도 모르고 이것까지 실행했다가 DB 마이그레이션 실패했다. AI라고 만능은 아니다. AI가 제시한 답변을 잘 읽어보고 문제 해결에 필요한 항목만 선별하는 요령도 필요하다.
Teldrive, 정크 파일 정리하기
Teldrive 1.6.9 버전부터 check --clean이란 옵션을 사용할 수 있는데, 텔레그램 채널에 산재한 정크 파일(orphan file)을 정리해 주는 명령이다.
ex) teldrie check --clean --config config.toml
결과(유실된 파일 목록)는 json 파일로 저장되고, 나 같은 경우 텔레그램에 저장된 대략 25만 파일 중 434개의 파일 손실된 것으로 나왔다. 유실된 파일 중 몇 개를 다른 클라우드에서 확인해 본 결과 원본 파일 문제는 아닌 것 같다. 내 생각엔 텔레그램 저장소 오류보다는 업로드 과정에서 문제가 발생한 것이 아닌가 싶다.
구글은 문제 해결의 시작일 뿐 끝은 아니다
아무튼, Teldrive를 계속 업데이트하다 보면 오늘 같은 문제는 언젠가 또 마주치게 될 것이고, ‘SQL 스크립트 구문’ 같은 전문가의 손이 필요한 세세한 것까지 가르침이 필요할 때, 구글에서 답을 얻지 못했다고 포기하지 말고 AI에게 물어보자.
온라인 AI 챗봇은 개인정보 유출 때문에 사용이 꺼려진다면, LM Studio 같은 오프라인 AI 챗봇을 이용해도 된다. 다만, 딥시크가 제안한 해결법과 비슷한 결과를 보여주는 모델은 Xortron22B-Uncensored.Q4_K_S이었는데, 모델 매개변수가 대략 22B 이상 되어야 만족할 만한 답을 제시해 주는 것으로 여겨진다.
끝으로 중요한 것은 AI가 제시한 해결 방법을 바로 메인 DB 서버에 적용하기 전에 테스트 서버에 적용해서 다른 문제는 없는지 확인해 봐야 한다는 것!!! 그리고 작업 전 DB 백업 필수!!!
비록 보잘 것 없지만 광고 수익(Ad revenue)은 블로거의 콘텐츠 창작 의욕을 북돋우는 강장제이자 때론 하루하루를 이어주는 즐거움입니다
0 comments:
댓글 쓰기
댓글은 검토 후 게재됩니다.
본문이나 댓글을 정독하신 후 신중히 작성해주세요