UPDATE EXTENSIONS 문
UPDATE EXTENSIONS 문
UPDATE EXTENSIONS 문은 로컬에 설치된 익스텐션 상태를 해당 익스텐션을 게시한 저장소와 동기화할 수 있게 해 줘요. 이 문은 익스텐션 개발자가 내놓는 새 기능이나 버그 수정으로 최신 상태를 유지하는 권장 방법이에요.
참고로 DuckDB 익스텐션은 런타임 중에 리로드할 수 없으므로, UPDATE EXTENSIONS는 업데이트된 익스텐션을 리로드하지 않아요. 업데이트된 익스텐션을 사용하려면 DuckDB를 실행하는 프로세스를 재시작해요.
출처: 문서
본문
모든 익스텐션 업데이트 (Updating All Extensions)
클라이언트의 DuckDB 버전에 설치된 모든 익스텐션을 업데이트하려면:
UPDATE EXTENSIONS;
이러면 익스텐션들을 순회하며 저장소와 업데이트 결과를 반환해요:
┌────────────────┬──────────────┬─────────────────────┬──────────────────┬─────────────────┐
│ extension_name │ repository │ update_result │ previous_version │ current_version │
│ varchar │ varchar │ varchar │ varchar │ varchar │
├────────────────┼──────────────┼─────────────────────┼──────────────────┼─────────────────┤
│ iceberg │ core_nightly │ UPDATED │ 6386ab5 │ b3ec51a │
│ icu │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ autocomplete │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ httpfs │ core_nightly │ NO_UPDATE_AVAILABLE │ cf3584b │ cf3584b │
│ json │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ aws │ core_nightly │ NO_UPDATE_AVAILABLE │ d3c5013 │ d3c5013 │
└────────────────┴──────────────┴─────────────────────┴──────────────────┴─────────────────┘
선택한 익스텐션 업데이트 (Updating Selected Extensions)
더 세밀한 제어를 위해, 업데이트할 익스텐션 이름 목록을 제공할 수도 있어요:
UPDATE EXTENSIONS (name_a, name_b, name_c);
동작 방식 (How It Works)
UPDATE EXTENSIONS는 가능하면 ETag 정보를 저장하고, 원격 익스텐션이 로컬의 것과 다르다는 조건(ETag를 대리로 사용)으로 GET 요청을 보내는 방식으로 구현돼요. 이러면 이후의 UPDATE EXTENSIONS 호출이 — 원격 상태가 바뀌지 않았다면 — 저비용이 돼요.
특정 익스텐션에 변경이 발견되면 DuckDB는 다음 연산을 수행해요. 예를 들어 name_a와 name_c가 변경됐다면:
UPDATE EXTENSIONS (name_a, name_b, name_c);
이러면 다음 명령들이 실행돼요:
FORCE INSTALL name_a;
FORCE INSTALL name_c;