데이터베이스 연결하기
데이터베이스 연결하기 (Attach Database, 지원 중단 예정)
여러 데이터베이스를 한 트랜잭션 안에서 엮어 데이터를 읽고 싶다면 ATTACH 문을 사용해요. 다만 이 기능은 신규 사용자에게는 지원 중단(deprecated)되었으니 참고해 주세요.
출처: 문서
본문
이 기능은 모든 신규 사용자에게 지원 중단되었어요. 기존 유료 사용자는 계속 ATTACH를 사용할 수 있어요 — 발표 공지를 읽어 보세요.
ATTACH 문은 여러 데이터베이스를 하나의 트랜잭션 안에서 연결할 수 있게 해 줘요. 이런 경우에 딱이에요:
- 데이터를 모듈 방식으로 구성하고 싶을 때
- 데이터 접근을 간소화하고 확장성을 높이고 싶을 때
- 데이터를 집계하고 싶을 때
동작 방식
- 연결하려는 데이터베이스에서
ATTACH기능을 활성화해요. ATTACH하려는 데이터베이스의 Database ID를 알아내요.- 데이터베이스에 연결해요
- CLI:
--attach플래그로 올바른 권한을 가진 토큰을 자동 생성해요. - SDK: attach하려는 데이터베이스에
attach권한이 있는 토큰을 만들어요.
- CLI:
- 데이터베이스 셸이나 SDK 안에서
ATTACH를 호출해 다른 데이터베이스에 연결해요.
사용법
ATTACH 문을 사용하면 CLI 또는 libSQL SDK로 트랜잭션 안에서 다른 데이터베이스에 연결할 수 있어요. 연결되고 나면 지정한 별칭(alias)을 사용해 attached 데이터베이스를 현재 데이터베이스의 일부처럼 쿼리할 수 있어요.
Turso CLI
Turso CLI가 설치되어 있고 로그인되어 있는지 확인하세요.
1. 필요한 데이터베이스에서 attach 활성화하기
먼저 attach하려는 데이터베이스에서 ATTACH 기능을 활성화해야 해요:
turso db config attach allow <database-name>
2. Database ID 알아내기
이제 ATTACH하려는 데이터베이스의 Database ID를 알아내야 해요:
turso db show <database-name>
3. attach 플래그로 연결하기
이제 데이터베이스에 연결할 때 --attach 플래그로 데이터베이스 이름을 전달하세요:
turso db shell <database-name> --attach <...database-name(s)>
4. ATTACH 실행
데이터베이스에 연결되고 나면 ATTACH 문으로 다른 데이터베이스를 연결할 수 있어요:
ATTACH "<database-id>" AS my_db;
5. 쿼리
attached 데이터베이스의 별칭으로 쿼리를 실행해 보세요:
SELECT * FROM my_db.my_table;
libSQL SDK
libSQL 클라이언트 SDK를 TypeScript, Rust, Go, Python, 또는 HTTP로 사용할 수 있어요.
1. 필요한 데이터베이스에서 attach 활성화하기
먼저 attach하려는 데이터베이스에서 ATTACH 기능을 활성화해야 해요:
turso db config attach allow <database-name>
2. Database ID 알아내기
이제 ATTACH하려는 데이터베이스의 Database ID를 알아내야 해요:
turso db show <database-name>
3. ATTACH 권한이 있는 토큰 만들기
이제 attach하려는 데이터베이스에 대해 attach 권한이 있는 libSQL 클라이언트용 토큰을 만드세요:
turso db tokens create <database-name> --attach <another-database-name>
4. ATTACH로 연결하기
클라이언트 SDK로 읽기 트랜잭션 안에서 원하는 데이터베이스를 attach하세요:
import { createClient } from "@libsql/client";
const client = createClient({
syncUrl: "libsql://...",
authToken: "...",
});
const txn = await db.transaction("read");
await txn.execute('ATTACH "<database-id>" AS my_db');
const rs = await txn.execute("SELECT * FROM my_db.my_table");
알아 두어야 할 것들
attach기능이 활성화된 데이터베이스만 attach할 수 있어요.- 같은 그룹(group)에 속한 데이터베이스만 attach할 수 있어요.
- 하나의 트랜잭션에 attach할 수 있는 데이터베이스는 최대 10개예요.
- attached 데이터베이스는 읽기 전용이에요.
ATTACH문은 트랜잭션 안에서만 사용할 수 있어요.ATTACH는 임베디드 레플리카를 지원하지 않아요.
더 알아보기 (Learn more)
- 임베디드 레플리카 소개 (Embedded Replicas) — ATTACH와 함께 쓸 수 없는 기능 살펴보기
- 브랜칭 (Branching) — 데이터베이스 브랜치 만들기
- TypeScript SDK — libSQL 클라이언트로 연결하기
- 데이터베이스 토큰 (db tokens) — attach 권한이 있는 토큰 만들기