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_aname_c가 변경됐다면:

UPDATE EXTENSIONS (name_a, name_b, name_c);

이러면 다음 명령들이 실행돼요:

FORCE INSTALL name_a;
FORCE INSTALL name_c;

더 알아보기 (Learn more)