본문 바로가기
Back-end/nest.js

TypeORM : Postgresql 42703 에러 ( + as 사용시 소문자만 나오는 경우 해결법)

by hsloth 2023. 3. 11.

 

TypeOrm으로 Postgresql 이용 도중 Select 문을 사용하다가 발견한 에러이다.

driverError: error: column "a.createdAt" does not exist

code: '42703' error

 

let query = this.articleRepository
	.createQueryBuilder('a')
    .select([
    	'a.id as id',
        'a.title as title',
        'a.createdAt as createdAt',
    ]);
    
...

query = query.orderBy('createdAt', 'DESC');

 

 

게시글 목록을 불러오기 위하여 대충 위처럼 코드를 짰다. (완전 똑같지는 않다)

그런데, as를 썼는데 return 값이 createdAt이 아닌 createat으로 소문자로 나오는 게 문제였다.

그래서 해결방법을 찾았다. 그것은 바로 따옴표를 붙이는 것

 

 

let query = this.articleRepository
	.createQueryBuilder('a')
    .select([
    	'a.id as "id"',
        'a.title as "title"',
        'a.createdAt as "createdAt"',
    ]);
    
...

query = query.orderBy('createdAt', 'DESC');

그래서 위처럼 코드를 변경했다. 그런데....

 

driverError: error: column "a.createdAt" does not exist

라는 에러가 계속 발생하였다. 그래서 뭐가 문제지 하고 코드를 이것저것 살펴본 결과

orderBy가 문제였다.

 

그래서 아래와 같이 orderBy에 따옴표를 붙여주면 된다. (왜 자동으로 안 붙여주는지 모르겠다 ㅠ)

let query = this.articleRepository
	.createQueryBuilder('a')
    .select([
    	'a.id as "id"',
        'a.title as "title"',
        'a.createdAt as "createdAt"',
    ]);
    
...

query = query.orderBy('"createdAt"', 'DESC');

 

나는 변수 사용을 위해 백틱을 써서 query.orderBy(`${order.type}`, `${order.order}`);

와 같이 사용했었는데 어쩌면 백틱때문일지도 모른다.