[마이그레이션] Vapor서버 실행시 테이블 마이그레이션 이슈

힐링힐링·2024년 1월 8일
0

네트워크

목록 보기
3/5

현상

클라이언트에서 저장시 users테이블이 생성이 안되어 아래와 같은 오류가 뜸

[ WARNING ] PSQLError(code: server, serverInfo: [sqlState: 42P01, file: parse_relation.c, line: 1395, message: relation "users" does not exist, position: 158, routine: parserOpenTable, localizedSeverity: ERROR, severity: ERROR], triggeredFromRequestInFile: PostgresKit/PostgresDatabase+SQL.swift, line: 53, query: PostgresQuery(sql: SELECT "users"."id" AS "users_id", "users"."username" AS "users_username", "users"."email" AS "users_email", "users"."created_at" AS "users_created_at" FROM "users", binds: [])) [request-id: ADF414FF-1118-48C5-983D-8E3890A09774]

Migragtion 부분


struct CreateUser: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        return database.schema("users")
            .field("id", .int, .identifier(auto: true)) // 자동채번 활성화
            .field("username", .string, .required)
            .field("email", .string, .required)
            .field("created_at", .datetime, .required)
            .create()
    }

    func revert(on database: Database) -> EventLoopFuture<Void> {
        return database.schema("users").delete()
    }
}

configure 부분

부분코드

try await app.autoMigrate().get() 잘함

app.migrations.add(CreateUser())
try await app.autoMigrate().get()

풀코드

public func configure(_ app: Application) async throws {
    // uncomment to serve files from /Public folder
    // app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))

    //연결test시 상위 터미널에서 swift run실해
    // PostgreSQL 데이터베이스 연결 구성
    app.databases.use(.postgres(
        hostname: "호스트명",
        port: 5432, username: "postgres",
        password: "비밀번호",
        database: "initial_db",
        tlsConfiguration: .forClient(certificateVerification: .none)
    ), as: .psql)
    
    // 마이그레이션 추가
    app.migrations.add(CreateUser())


    // register routes
    try routes(app)
    //마이그레이션 자동실행
    try await app.autoMigrate().get()
//    try await app.autoMigrate().get()
}

원인

TEST하려고 users테이블을 강제 drop해줬는데, "_fluent_migrations" users 테이블에 마이그레이션 기록이 남아 있던거였음

select * from "_fluent_migrations" 

해결방법

_fluent_migrations 에서 관련 테이블 기록 삭제

profile
블로그 이전합니다 https://james-kim-tech.tistory.com/

0개의 댓글