필요성
예전 golang 코드에 사용하고 있는 db migration 관리 라이브러리: migrate
이 라이브러리는 기존 레포에서,
GitHub – mattes/migrate: Database migrations. CLI and Golang library. ->
아래 레포로 리포지토리가 변경되어 관리 중에 있었습니다.
GitHub – golang-migrate/migrate: Database migrations. CLI and Golang library.
기존 코드 수정이 필요해서 README 를 읽기 위해 들어왔다가 기존 코드가 예전과는 다르게 변경, 관리되는 것을 알게되어서 레포 변경을 하기로 마음을 먹었습니다.
문제
migrate up
변경 후 migrate up 실행시에 아래와 같은 문제가 발생했습니다.
error: pq: column “dirty” does not exist in line 0 · Issue #34 · golang-migrate/migrate · GitHub
아마 dirty 컬럼이 추가 된 듯 합니다.dirty
column 을 수동으로 추가해줍니다.
alter table schema_migrations add column dirty boolean not null default false;
다시 migrate 를 실행하면 정상동작합니다.
Postgres driver 를 사용할때 발생하는 문제
- Postgres driver 를 사용할때 발생하는 문제
- Migrate 라이브러리 import 후에 New, Up 코드 작성
- Compile and Run
- have panic….
panic: sql: Register called twice for driver postgres
goroutine 1 [running]:
database/sql.Register(0x1f34e5d, 0x8, 0x2794580, 0x281b590)
/Users/ktg/.gvm/gos/go1.9/src/database/sql/sql.go:50 +0x1ad
github.com/golang-migrate/migrate/vendor/github.com/lib/pq.init.0()
/Users/ktg/go/src/github.com/golang-migrate/migrate/vendor/github.com/lib/pq/conn.go:49 +0x5c
github.com/golang-migrate/migrate/vendor/github.com/lib/pq.init()
<autogenerated>:1 +0x782
github.com/golang-migrate/migrate/database/postgres.init()
<autogenerated>:1 +0x7d
devops-mocha3/cmd/mocha/setup.init()
<autogenerated>:1 +0x5d
main.init()
<autogenerated>:1 +0x78
처음엔 뭘 잘못 했나 싶어서 이것 저것 해봤는데, 동일 증상…
그러다 이런 글 발견
Driver is being registered twice · Issue #238 · lib/pq · GitHub
이번 문제는 vendor에 있는 파일(lib/pg)을 한번 호출 하고, 다시 GOPATH 에 있는 파일을 호출한 것.
수정을 위해 dep ensure
실행을 해줍니다.
그리고 다시 컴파일 후 실행하면 정상동작합니다.