ERROR [ExceptionsHandler] relation "goods_entity" does not existQueryFailedError: relation "goods_entity" does not exist

2023. 8. 10. 17:03에러대응

문제 상황

 

EC2 우분투 환경에서 docker 로 올려놓은 nest.js 와 RDS 를 연결해 실행했을 때 나왔던 오류이다.

 

[Nest] 37406  - 2023. 08. 10. 오전 6:16:27   ERROR [ExceptionsHandler] relation "goods_entity" does not exist
QueryFailedError: relation "goods_entity" does not exist
    at PostgresQueryRunner.query (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/driver/postgres/PostgresQueryRunner.ts:299:19)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at SelectQueryBuilder.loadRawResults (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/query-builder/SelectQueryBuilder.ts:3789:25)
    at SelectQueryBuilder.executeEntitiesAndRawResults (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/query-builder/SelectQueryBuilder.ts:3541:26)
    at SelectQueryBuilder.getRawAndEntities (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/query-builder/SelectQueryBuilder.ts:1670:29)
    at SelectQueryBuilder.getMany (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/query-builder/SelectQueryBuilder.ts:1760:25)
    at /Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/persistence/SubjectDatabaseEntityLoader.ts:118:32
    at async Promise.all (index 0)
    at SubjectDatabaseEntityLoader.load (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/persistence/SubjectDatabaseEntityLoader.ts:150:9)
    at /Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/src/persistence/EntityPersistExecutor.ts:116:21

 

데이터를 제대로 못가져오는 문제가 발생했음

 

pgAdmin 을 확인해본 결과 테이블이 제대로 생성되지 않았다는 것을 확인했음

 


data-source.ts 파일에 아래 코드를 추가해주었다.

 

  ssl: {
    rejectUnauthorized: false,
  },

 

추가로 Dockerfile 에서 npm run migration:run 을 안해줘서 그런것 같다는 생각이 들었다.

 


Dockerfile 수정

 

FROM node:18

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

RUN npm run migration:run    << 마이그레이션 목적으로 추가함

EXPOSE 3000

CMD [ "node", "dist/main" ]

해결 된 것 같았으나 여전히 오류가 존재함 

 


오류를 확인해보기 위해서 아래처럼 Dockerfile 을 변경

 

// ...

# 마이그레이션 실행. 실패 시 컨테이너 빌드도 중단됩니다.
RUN npm run migration:run || exit 1

// ...

오류를 확인해보려고 했으나 오류가 보이지 않았음

 


Docker 내부로 가서 직접 마이그레이션을 실행해보았음

 

sudo docker exec -it c2975e61be63 /bin/sh

npm run migration:run
> ticket-nest@0.0.1 migration:run
> ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:run -d ./src/database/data-source.ts

query: SELECT * FROM current_schema()
query: SELECT version();
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
No migrations are pending

 

 

"No migrations are pending" 이라는 메시지가 출력되고 있다. 이미 현재 모든 마이그레이션 작업이 적용된 상태라는 뜻임


Docker 디렉토리에 접근해 컨테이너를 지워봤음

 

sudo cd /var/lib/docker

sudo su
cd /var/lib/docker
rm -rf 아이디로된 디렉토리

 

그리고 다시 재시작 해보았지만 작동하지 않았다.

 


도커 ip 주소가 rds 인바운드 규칙에 추가가 안된거라면??

 

sudo docker inspect <컨테이너 ID>

 

ip 가 172.17.0.2 인걸 볼 수 있었다.

 

이를 인바운드 규칙에 추가해보았으나 작동하지 않았다.

 


SOLVE

 

새로 데이터베이스 서버를 만들어서 해보았다.

 

이로서 해결되었는데

 

아마도 앞서 사용했던 데이터베이스 서버는 로컬에서 RDS 를 사용할때 이미 한번 migration 을 했었기 때문에 안되었었다고 생각한다.