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 을 했었기 때문에 안되었었다고 생각한다.