Dbmate는 여러 개발자와 프로덕션 서버에서 데이터베이스 스키마를 동기화 상태로 유지하는 데이터베이스 마이그레이션 도구입니다.
Go, Node.js, Python, Ruby, PHP, Rust, C++ 또는 데이터베이스 지원 애플리케이션을 작성하는 데 사용하는 기타 언어나 프레임워크와 함께 사용할 수 있는 독립형 명령줄 도구입니다. 이는 다양한 언어로 여러 서비스를 작성하고 일관된 개발 도구를 사용하여 온전한 상태를 유지하려는 경우 특히 유용합니다.
dbmate와 기타 널리 사용되는 데이터베이스 스키마 마이그레이션 도구를 비교하려면 대안을 참조하세요.
schema.sql
파일 저장 지원DATABASE_URL
)를 사용하여 정의되거나 명령줄에 지정됩니다..env
파일에서 환경 변수를 읽는 기능이 내장되어 있습니다.NPM
NPM을 사용하여 설치:
npm install --save-dev dbmate
npx dbmate --help
macOS
Homebrew를 사용하여 설치:
brew install dbmate
dbmate --help
리눅스
바이너리를 직접 설치합니다.
sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64
sudo chmod +x /usr/local/bin/dbmate
/usr/local/bin/dbmate --help
윈도우
Scoop을 사용하여 설치
scoop install dbmate
dbmate -- help
도커
Docker 이미지는 GitHub Container Registry( ghcr.io/amacneil/dbmate
)에 게시됩니다.
--network=host
설정하거나 docker 네트워킹과 함께 dbmate를 사용하는 방법에 대한 추가 팁을 보려면 이 설명을 참조하세요.
docker run --rm -it --network=host ghcr.io/amacneil/dbmate --help
마이그레이션을 생성하거나 적용하려면 Docker의 바인드 탑재 기능을 사용하여 로컬 작업 디렉터리( pwd
)를 dbmate 컨테이너 내에서 사용할 수 있도록 해야 합니다.
docker run --rm -it --network=host -v " $( pwd ) /db:/db " ghcr.io/amacneil/dbmate new create_users_table
dbmate --help # print usage help
dbmate new # generate a new migration file
dbmate up # create the database (if it does not already exist) and run any pending migrations
dbmate create # create the database
dbmate drop # drop the database
dbmate migrate # run any pending migrations
dbmate rollback # roll back the most recent migration
dbmate down # alias for rollback
dbmate status # show the status of all migrations (supports --exit-code and --quiet)
dbmate dump # write the database schema.sql file
dbmate load # load schema.sql file to the database
dbmate wait # wait for the database server to become available
다음 옵션은 모든 명령에서 사용할 수 있습니다. dbmate [global options] command [command options]
순서로 명령줄 인수를 사용해야 합니다. 대부분의 옵션은 환경 변수를 통해 구성할 수도 있습니다(팀 구성원 간에 구성을 공유하는 데 도움이 되는 .env
파일에서 로드할 수도 있음).
--url, -u "protocol://host:port/dbname"
- 데이터베이스 URL을 직접 지정합니다. (환경: DATABASE_URL
)--env, -e "DATABASE_URL"
- 데이터베이스 연결 URL을 읽을 환경 변수를 지정합니다.--env-file ".env"
- 로드할 대체 환경 변수 파일을 지정합니다.--migrations-dir, -d "./db/migrations"
- 마이그레이션 파일을 보관할 위치입니다. (환경: DBMATE_MIGRATIONS_DIR
)--migrations-table "schema_migrations"
- 마이그레이션을 기록할 데이터베이스 테이블. (env: DBMATE_MIGRATIONS_TABLE
)--schema-file, -s "./db/schema.sql"
-schema.sql 파일을 보관할 경로입니다. (환경: DBMATE_SCHEMA_FILE
)--no-dump-schema
- 마이그레이션/롤백 시 Schema.sql 파일을 자동 업데이트하지 않습니다 (env: DBMATE_NO_DUMP_SCHEMA
).--strict
- 마이그레이션이 순서대로 적용되지 않으면 실패합니다 (env: DBMATE_STRICT
).--wait
- 후속 명령을 실행하기 전에 db가 사용 가능해질 때까지 기다립니다 (env: DBMATE_WAIT
).--wait-timeout 60s
- --wait 플래그에 대한 시간 초과 (env: DBMATE_WAIT_TIMEOUT
) Dbmate는 기본적으로 DATABASE_URL
환경 변수를 사용하여 데이터베이스를 찾습니다. Twelve-Factor 앱을 작성하는 경우 모든 연결 문자열을 환경 변수에 저장해야 합니다.
이를 쉽게 개발할 수 있도록 dbmate는 현재 디렉터리에서 .env
파일을 찾고 거기에 나열된 모든 변수를 현재 환경에 지정된 것처럼 처리합니다(단, 기존 환경 변수가 우선 적용됩니다).
.env
파일이 아직 없다면 파일을 만들고 데이터베이스 연결 URL을 추가하세요.
$ cat .env
DATABASE_URL= " postgres://[email protected]:5432/myapp_development?sslmode=disable "
DATABASE_URL
다음 형식으로 지정되어야 합니다.
protocol://username:password@host:port/database_name?options
protocol
mysql
, postgres
, postgresql
, sqlite
, sqlite3
, clickhouse
중 하나여야 합니다.username
과 password
URL로 인코딩되어야 합니다(특수 문자를 사용하면 오류가 발생합니다).host
호스트 이름 또는 IP 주소일 수 있습니다.options
드라이버별로 다릅니다(이것을 사용하려면 기본 Go SQL 드라이버를 참조하세요). Dbmate는 다른 환경 변수에서 연결 URL을 로드할 수도 있습니다. 예를 들어, 테스트 스위트를 실행하기 전에 테스트 데이터베이스를 삭제하고 다시 생성할 수 있습니다. 이를 수행하는 쉬운 방법 중 하나는 테스트 데이터베이스 연결 URL을 TEST_DATABASE_URL
환경 변수에 저장하는 것입니다.
$ cat .env
DATABASE_URL= " postgres://[email protected]:5432/myapp_dev?sslmode=disable "
TEST_DATABASE_URL= " postgres://[email protected]:5432/myapp_test?sslmode=disable "
그런 다음 테스트 스크립트(Makefile 또는 유사)에서 이 환경 변수를 지정할 수 있습니다.
$ dbmate -e TEST_DATABASE_URL drop
Dropping: myapp_test
$ dbmate -e TEST_DATABASE_URL --no-dump-schema up
Creating: myapp_test
Applying: 20151127184807_create_users_table.sql
Applied: 20151127184807_create_users_table.sql in 123µs
또는 명령줄에서 직접 URL을 지정할 수 있습니다.
$ dbmate -u " postgres://[email protected]:5432/myapp_test?sslmode=disable " up
dbmate -u $TEST_DATABASE_URL
보다 dbmate -e TEST_DATABASE_URL
사용할 때의 유일한 장점은 전자가 dbmate의 자동 .env
파일 로딩을 활용한다는 것입니다.
Postgres에 연결할 때 기본적으로 dbmate에는 TLS 연결이 필요하므로 연결 문자열에 sslmode=disable
옵션을 추가해야 할 수도 있습니다(일부 다른 프레임워크/언어에서는 기본적으로 암호화되지 않은 연결을 허용함).
DATABASE_URL= " postgres://username:[email protected]:5432/database_name?sslmode=disable "
Unix 소켓을 통해 연결하기 위해 socket
또는 host
매개변수를 지정할 수 있습니다(참고: 디렉토리만 지정).
DATABASE_URL= " postgres://username:password@/database_name?socket=/var/run/postgresql "
search_path
매개변수는 마이그레이션을 적용하는 동안 현재 스키마를 지정하는 데 사용할 수 있을 뿐만 아니라 dbmate의 schema_migrations
테이블에도 사용할 수 있습니다. 스키마가 존재하지 않으면 자동으로 생성됩니다. 쉼표로 구분된 여러 스키마가 전달되면 첫 번째 스키마가 schema_migrations
테이블에 사용됩니다.
DATABASE_URL= " postgres://username:[email protected]:5432/database_name?search_path=myschema "
DATABASE_URL= " postgres://username:[email protected]:5432/database_name?search_path=myschema,public "
DATABASE_URL= " mysql://username:[email protected]:3306/database_name "
Unix 소켓을 통해 연결하려면 socket
매개변수를 지정할 수 있습니다.
DATABASE_URL= " mysql://username:password@/database_name?socket=/var/run/mysqld/mysqld.sock "
SQLite 데이터베이스는 파일 시스템에 저장되므로 호스트를 지정할 필요가 없습니다. 기본적으로 파일은 현재 디렉터리를 기준으로 합니다. 예를 들어 다음은 ./db/database.sqlite3
에 데이터베이스를 생성합니다.
DATABASE_URL= " sqlite:db/database.sqlite3 "
절대 경로를 지정하려면 경로에 슬래시를 추가하세요. 다음은 /tmp/database.sqlite3
에 데이터베이스를 생성합니다.
DATABASE_URL= " sqlite:/tmp/database.sqlite3 "
DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name "
ClickHouse 클러스터를 사용하기 위해 제공할 수 있는 4개의 연결 쿼리 매개변수가 있습니다.
on_cluster
- 클러스터 문과 복제된 마이그레이션 테이블을 사용하라는 표시입니다. (기본값: false
) 이 파라미터를 제공하지 않으면 다른 클러스터 관련 쿼리 파라미터는 무시됩니다. DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name?on_cluster "
DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name?on_cluster=true "
cluster_macro
(선택 사항) - ON CLUSTER 문 및 복제된 마이그레이션 테이블 엔진 사육사 경로에 사용되는 매크로 값입니다. (기본값: {cluster}
) DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name?on_cluster&cluster_macro={my_cluster} "
replica_macro
(선택 사항) - 복제된 마이그레이션 테이블 엔진의 복제본 이름에 사용되는 매크로 값입니다. (기본값: {replica}
) DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name?on_cluster&replica_macro={my_replica} "
zoo_path
(선택 사항) - ClickHouse/Zoo Keeper의 테이블 마이그레이션 경로입니다. (기본값: /clickhouse/tables/<cluster_macro>/{table}
) DATABASE_URL= " clickhouse://username:[email protected]:9000/database_name?on_cluster&zoo_path=/zk/path/tables "
지원되는 다른 연결 옵션을 참조하세요.
GCP에서 실제 BigQuery에 연결할 때 DATABASE_URL
에 대해 다음 형식을 따르세요.
bigquery://projectid/location/dataset
projectid
(필수) - 프로젝트 ID
dataset
(필수) - 프로젝트 내 데이터세트 이름
location
(선택사항) - 데이터세트가 생성되는 위치
참고: 적절한 인증을 위해 GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 설정하는 방법은 이 문서를 따르세요.
BigQuery 에뮬레이터와 같은 커스텀 엔드포인트에 연결을 시도하는 경우 다음 형식을 따르세요.
bigquery://host:port/projectid/location/dataset?disable_auth=true
disable_auth
(선택 사항) - 인증을 건너뛰려면 true
전달하고, 에뮬레이터 테스트 및 연결에만 사용합니다.
Spanner 지원은 현재 데이터베이스 생성 중에 선택해야 하는 PostgreSQL 언어를 사용하는 데이터베이스로 제한됩니다. GoogleSQL을 지원하는 향후 Spanner에 대해서는 이 토론을 참조하세요.
Postgres 인터페이스가 있는 Spanner를 사용하려면 PGAdapter가 실행 중이어야 합니다. DATABASE_URL
에 대해 다음 형식을 사용하고 호스트 및 포트는 PGAdapter가 실행되는 위치로 설정됩니다.
DATABASE_URL= " spanner-postgres://127.0.0.1:5432/database_name?sslmode=disable "
인증은 PGAdapter에 의해 처리되므로 사용자 이름과 비밀번호를 지정할 필요가 없습니다(지정된 경우 PGAdapter에 의해 무시됨).
Postgres 드라이버의 다른 옵션이 지원됩니다.
또한 Spanner는 명시적 트랜잭션 내에서 DDL이 실행되는 것을 허용하지 않습니다. 따라서 DDL을 포함하는 마이그레이션에서는 transaction:false
지정해야 합니다.
-- migrate:up transaction:false
CREATE TABLE ...
-- migrate:down transaction:false
DROP TABLE ...
pg_dump
Spanner에서 제공하지 않는 기능을 사용하므로 스키마 덤프는 현재 지원되지 않습니다.
새 마이그레이션을 생성하려면 dbmate new create_users_table
실행하세요. 마이그레이션 이름을 원하는 대로 지정할 수 있습니다. 그러면 현재 디렉터리에 db/migrations/20151127184807_create_users_table.sql
파일이 생성됩니다.
-- migrate:up
-- migrate:down
마이그레이션을 작성하려면 간단히 migrate:up
섹션에 SQL을 추가하세요.
-- migrate:up
create table users (
id integer ,
name varchar ( 255 ),
email varchar ( 255 ) not null
);
-- migrate:down
참고: 마이그레이션 파일의 이름은
[version]_[description].sql
형식으로 지정됩니다. 버전(파일 이름의 모든 선행 숫자로 정의됨)만 데이터베이스에 기록되므로 현재 애플리케이션 상태에 영향을 주지 않고 마이그레이션 파일의 이름을 안전하게 바꿀 수 있습니다.
보류 중인 마이그레이션을 실행하려면 dbmate up
실행하세요.
$ dbmate up
Creating: myapp_development
Applying: 20151127184807_create_users_table.sql
Applied: 20151127184807_create_users_table.sql in 123µs
Writing: ./db/schema.sql
참고:
dbmate up
데이터베이스가 아직 존재하지 않는 경우 데이터베이스를 생성합니다(현재 사용자에게 데이터베이스 생성 권한이 있다고 가정). 데이터베이스를 생성하지 않고 마이그레이션을 실행하려면dbmate migrate
실행하세요.
보류 중인 마이그레이션은 항상 번호순으로 적용됩니다. 그러나 dbmate는 마이그레이션이 독립적으로 커밋되는 경우 마이그레이션이 순서대로 적용되는 것을 방지하지 않습니다(예: 개발자가 오랫동안 브랜치에서 작업하고 다른 버전보다 낮은 버전 번호의 마이그레이션을 커밋하는 경우). 마이그레이션이 적용되면 dbmate는 단순히 보류 중인 마이그레이션을 적용합니다. 자세한 설명은 #159를 참조하세요.
기본적으로 dbmate는 마이그레이션을 롤백하는 방법을 모릅니다. 개발 중에는 데이터베이스를 이전 상태로 되돌릴 수 있는 것이 유용한 경우가 많습니다. 이를 수행하려면 migrate:down
섹션을 구현하십시오.
-- migrate:up
create table users (
id integer ,
name varchar ( 255 ),
email varchar ( 255 ) not null
);
-- migrate:down
drop table users;
가장 최근 마이그레이션을 롤백하려면 dbmate rollback
실행하세요.
$ dbmate rollback
Rolling back: 20151127184807_create_users_table.sql
Rolled back: 20151127184807_create_users_table.sql in 123µs
Writing: ./db/schema.sql
dbmate는 key:value
쌍의 형태로 마이그레이션 블록에 전달되는 옵션을 지원합니다. 지원되는 옵션 목록:
transaction
거래
transaction
트랜잭션 내에서 SQL을 실행하지 않으려는 경우 유용합니다.
-- migrate:up transaction:false
ALTER TYPE colors ADD VALUE ' orange ' AFTER ' red ' ;
데이터베이스가 지원하는 경우 transaction
기본적으로 true
로 설정됩니다.
프로젝트에 Docker 개발 환경을 사용하는 경우 마이그레이션이나 단위 테스트를 실행할 때 데이터베이스가 즉시 준비되지 않는 문제가 발생할 수 있습니다. 데이터베이스 서버가 방금 시작되었기 때문일 수 있습니다.
일반적으로 애플리케이션은 시작 시 작동 중인 데이터베이스 연결이 없어도 복원력이 있어야 합니다. 그러나 마이그레이션이나 단위 테스트를 실행하기 위한 목적으로는 이는 실용적이지 않습니다. wait
명령은 데이터베이스를 사용할 수 있을 때까지 스크립트나 다른 응용 프로그램을 일시 중지할 수 있도록 하여 이러한 상황을 방지합니다. Dbmate는 최대 60초까지 매초마다 데이터베이스 서버에 연결을 시도합니다.
데이터베이스를 사용할 수 있는 경우 wait
출력을 반환하지 않습니다.
$ dbmate wait
데이터베이스를 사용할 수 없는 경우 데이터베이스를 사용할 수 있을 때까지 wait
차단됩니다.
$ dbmate wait
Waiting for database....
데이터베이스가 아직 준비되지 않아 오류가 발생한 경우 다른 명령과 함께 --wait
플래그를 사용할 수도 있습니다.
$ dbmate --wait up
Waiting for database....
Creating: myapp_development
--wait-timeout
(기본값 60초)을 사용하여 시간 초과를 사용자 정의할 수 있습니다. 데이터베이스를 여전히 사용할 수 없는 경우 명령은 오류를 반환합니다.
$ dbmate --wait-timeout=5s wait
Waiting for database.....
Error: unable to connect to database: dial tcp 127.0.0.1:5432: connect: connection refused
wait
명령은 지정된 데이터베이스가 존재하는지 여부를 확인하지 않고 서버가 사용 가능하고 준비되었는지만 확인합니다. 따라서 데이터베이스 서버를 사용할 수 있지만 데이터베이스가 아직 생성되지 않은 경우 성공을 반환합니다.
up
, migrate
또는 rollback
명령을 실행하면 dbmate는 데이터베이스 스키마의 전체 표현을 포함하는 ./db/schema.sql
파일을 자동으로 생성합니다. Dbmate는 이 파일을 최신 상태로 유지하므로 수동으로 편집하면 안 됩니다.
커밋이나 끌어오기 요청에서 스키마 변경 사항을 쉽게 검토할 수 있도록 이 파일을 소스 제어로 체크인하는 것이 좋습니다. 각 마이그레이션을 순차적으로 실행하지 않고(예: 테스트 도구에서) 데이터베이스 스키마를 빠르게 로드하려는 경우에도 이 파일을 사용할 수 있습니다. 하지만 이 파일을 저장하지 않으려면 .gitignore
에 추가하거나 --no-dump-schema
명령줄 옵션을 전달할 수 있습니다.
다른 작업을 수행하지 않고 schema.sql
파일을 덤프하려면 dbmate dump
실행하세요. 다른 dbmate 작업과 달리 이 명령은 PATH에서 사용할 수 있는 각각의 pg_dump
, mysqldump
또는 sqlite3
명령에 의존합니다. 이러한 도구를 사용할 수 없는 경우 dbmate는 up
, migrate
또는 rollback
작업 중에 스키마 덤프 단계를 자동으로 건너뜁니다. dbmate dump
실행하고 출력을 확인하여 문제를 진단할 수 있습니다.
$ dbmate dump
exec: " pg_dump " : executable file not found in $PATH
Ubuntu 또는 Debian 시스템에서는 postgresql-client
, mysql-client
또는 sqlite3
각각 설치하여 이 문제를 해결할 수 있습니다. 설치하는 패키지 버전이 데이터베이스 서버에서 실행 중인 버전보다 크거나 같은지 확인하세요.
참고: 일부 테이블이나 열이 dbmate 마이그레이션 외부에서 생성된 경우에도
schema.sql
파일에는 데이터베이스에 대한 전체 스키마가 포함됩니다.
Dbmate는 모든 언어나 프레임워크에서 CLI로 사용하도록 설계되었지만 Go 애플리케이션에서 라이브러리로 사용할 수도 있습니다.
다음은 간단한 예입니다. 필요한 드라이버를 가져오는 것을 잊지 마세요!
package main
import (
"net/url"
"github.com/amacneil/dbmate/v2/pkg/dbmate"
_ "github.com/amacneil/dbmate/v2/pkg/driver/sqlite"
)
func main () {
u , _ := url . Parse ( "sqlite:foo.sqlite3" )
db := dbmate . New ( u )
err := db . CreateAndMigrate ()
if err != nil {
panic ( err )
}
}
더 많은 옵션을 보려면 참조 문서를 확인하세요.
Go의 포함 기능을 사용하여 마이그레이션을 애플리케이션 바이너리에 포함할 수 있습니다.
db.FS
사용하여 마이그레이션 읽기에 사용되는 파일 시스템을 지정합니다.
package main
import (
"embed"
"fmt"
"net/url"
"github.com/amacneil/dbmate/v2/pkg/dbmate"
_ "github.com/amacneil/dbmate/v2/pkg/driver/sqlite"
)
//go:embed db/migrations/*.sql
var fs embed. FS
func main () {
u , _ := url . Parse ( "sqlite:foo.sqlite3" )
db := dbmate . New ( u )
db . FS = fs
fmt . Println ( "Migrations:" )
migrations , err := db . FindMigrations ()
if err != nil {
panic ( err )
}
for _ , m := range migrations {
fmt . Println ( m . Version , m . FilePath )
}
fmt . Println ( " n Applying..." )
err = db . CreateAndMigrate ()
if err != nil {
panic ( err )
}
}
마이그레이션 파일은 매우 간단하며 기본적으로 ./db/migrations
에 저장됩니다. dbmate new create_users
실행하여 [date]_create_users.sql
이라는 새 마이그레이션 파일을 생성할 수 있습니다. 예는 다음과 같습니다.
-- migrate:up
create table users (
id integer ,
name varchar ( 255 ),
);
-- migrate:down
drop table if exists users;
편집이 쉽도록 상향 및 하향 마이그레이션이 모두 동일한 파일에 저장됩니다. 다운 마이그레이션을 구현하지 않기로 선택한 경우에도 up 및 down 지시어가 모두 필요합니다.
마이그레이션을 적용하면 dbmate는 내용이 아닌 버전 번호만 저장하므로 내용을 수정하기 전에 항상 마이그레이션을 롤백해야 합니다. 이러한 이유로 버전 번호를 그대로 유지하는 한 적용 상태에 영향을 주지 않고 마이그레이션 파일의 이름을 안전하게 바꿀 수 있습니다.
스키마 파일은 기본적으로 ./db/schema.sql
에 기록됩니다. 적용된 마이그레이션 및 기타 수정 사항을 포함하여 데이터베이스 스키마의 전체 덤프입니다.
이 파일은 소스 제어에 체크인되어야 마이그레이션의 차이점을 쉽게 비교할 수 있습니다. 스키마 파일을 사용하면 모든 마이그레이션을 실행할 필요 없이 데이터베이스를 빠르게 복원할 수 있습니다.
Dbmate는 적용된 각 마이그레이션의 기록을 schema_migrations
라는 테이블에 저장합니다. 이 테이블이 아직 존재하지 않는 경우 자동으로 생성됩니다.
테이블은 매우 간단합니다.
CREATE TABLE IF NOT EXISTS schema_migrations (
version VARCHAR ( 255 ) PRIMARY KEY
)
--migrations-table
플래그 또는 DBMATE_MIGRATIONS_TABLE
환경 변수를 사용하여 이 테이블의 이름을 사용자 정의할 수 있습니다.
다른 데이터베이스 스키마 마이그레이션 도구가 필요한 이유는 무엇입니까? Dbmate는 구성이 간단하고 언어 및 프레임워크에 독립적이라는 목표를 가지고 주로 Active Record 마이그레이션과 같은 다른 많은 도구에서 영감을 받았습니다. 다음은 dbmate와 기타 널리 사용되는 마이그레이션 도구를 비교한 것입니다.
디비메이트 | 거위 | SQL 마이그레이션 | golang-마이그레이션 | 활성 레코드 | 속편화하다 | 이동 경로 | 삐걱거리다 | |
---|---|---|---|---|---|---|---|---|
특징 | ||||||||
일반 SQL 마이그레이션 파일 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||
데이터베이스 생성 및 삭제 지원 | ✅ | ✅ | ||||||
스키마 덤프 파일 저장 지원 | ✅ | ✅ | ||||||
타임스탬프 버전이 지정된 마이그레이션 파일 | ✅ | ✅ | ✅ | ✅ | ✅ | |||
커스텀 스키마 마이그레이션 테이블 | ✅ | ✅ | ✅ | ✅ | ||||
데이터베이스가 준비될 때까지 기다리는 기능 | ✅ | |||||||
환경 변수에서 로드된 데이터베이스 연결 문자열 | ✅ | ✅ | ||||||
.env 파일 자동 로드 | ✅ | |||||||
별도의 구성 파일 없음 | ✅ | ✅ | ✅ | ✅ | ✅ | |||
언어/프레임워크 독립적 | ✅ | ✅ | ✅ | ✅ | ✅ | |||
드라이버 | ||||||||
포스트그레SQL | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
MySQL | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
SQLite | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
클릭하우스 | ✅ | ✅ | ✅ | ✅ |
이 표에서 부정확한 부분을 발견하면 변경 사항을 제안해 주세요.
Dbmate는 Go로 작성되었으며 풀 요청을 환영합니다.
테스트는 docker compose를 사용하여 실제 데이터베이스에 대해 실행됩니다. Docker 이미지를 빌드하고 테스트를 실행하려면 다음 안내를 따르세요.
$ make docker-all
개발 셸을 시작하려면 다음 안내를 따르세요.
$ make docker-sh