Puri 쿼리 빌더
Puri는 Promise를 직접 구현하나요?
Puri는 Promise를 직접 구현하나요?
네, Puri는 사용 방법:주의:
Promise 인터페이스를 직접 구현합니다..getMany(),.getOne(),.getScalar()같은 메서드는 존재하지 않습니다- 항상 배열을 반환합니다 (
Expand<TResult>[]) - 단일 객체는
.first()사용
Puri에서 집계 함수를 사용하려면?
Puri에서 집계 함수를 사용하려면?
Puri.count(), Puri.sum(), Puri.avg() 등의 static 메서드를 사용합니다.Puri에서 JOIN을 사용하려면?
Puri에서 JOIN을 사용하려면?
INNER JOIN:LEFT JOIN:복잡한 JOIN 조건 (콜백 방식):
Puri에서 서브쿼리를 사용하려면?
Puri에서 서브쿼리를 사용하려면?
WHERE IN 서브쿼리:FROM 서브쿼리:
마이그레이션
마이그레이션을 생성하고 실행하려면?
마이그레이션을 생성하고 실행하려면?
1. Entity 수정Sonamu UI에서 Entity 편집2. 마이그레이션 생성또는 CLI:3. 마이그레이션 실행
마이그레이션을 안전하게 테스트하려면?
마이그레이션을 안전하게 테스트하려면?
Shadow DB를 사용하여 테스트합니다:Shadow DB 설정:
컬럼 타입을 변경할 때 기존 데이터를 안전하게 마이그레이션하려면?
컬럼 타입을 변경할 때 기존 데이터를 안전하게 마이그레이션하려면?
임시 컬럼을 활용하여 데이터를 변환한 후 원본 컬럼을 교체합니다.예시: string → integer 변환
컬럼명을 변경할 때 데이터를 보존하려면?
컬럼명을 변경할 때 데이터를 보존하려면?
Entity 자동 생성 시 DROP/ADD로 생성되므로 수동으로 RENAME 사용:
FK 제약조건이 있는 컬럼을 변경하려면?
FK 제약조건이 있는 컬럼을 변경하려면?
FK 제약을 삭제한 후 컬럼 변경, 다시 FK 재생성:
PostgreSQL 특화
PostgreSQL의 JSONB 연산자를 Puri에서 사용하려면?
PostgreSQL의 JSONB 연산자를 Puri에서 사용하려면?
JSONB 포함 연산자 JSONB 포함 연산자 (@>):값은 내부에서 직렬화되고 바인딩되므로 중첩 JSONB 속성:주의사항:
@>에는 타입 안전한 .whereJsonSupersetOf()를 사용합니다. 그 외 JSONB
연산자는 Puri.rawString()과 파라미터가 바인딩된 .whereRaw()를 사용합니다.JSONB 속성 조회 (->>, ->):JSON.stringify()를 직접 호출하지 않습니다. 괄호 안에서
OR 조건이 필요하면 whereGroup()의 orWhereJsonSupersetOf()를 사용합니다.JSONB 키 존재 여부 (?):->>는 텍스트 반환,->는 JSONB 반환- SQL Injection 방지를 위해 파라미터 바인딩 사용
- GIN 인덱스 생성 권장:
CREATE INDEX ON products USING gin(metadata);
PostgreSQL의 Full-Text Search를 사용하려면?
PostgreSQL의 Full-Text Search를 사용하려면?
ts_vector 컬럼 생성:검색 쿼리:하이라이팅:
트랜잭션
트랜잭션을 사용하려면?
트랜잭션을 사용하려면?
방법 1: 수동 트랜잭션 (방법 2: 에러 발생 시 자동 롤백됩니다. 더 자세한 내용은 수동 트랜잭션 및 @transactional 데코레이터 문서를 참고하세요.
getPuri("w").transaction())@transactional() 데코레이터