이 오류는 userId
컬럼에 not null
제약 조건이 있기 때문에 Null 값을 채울 수 없음을 의미합니다.
또한, seed
함수 스키마에 users
테이블을 노출하지 않았기 때문에 users.id
값을 생성하여 userId
컬럼을 채울 수 없습니다.
Drizzle | 외래 키가 있는 부분적으로 노출된 테이블 시딩하기
PostgreSQL
MySQL
SQLite
This guide assumes familiarity with:
- PostgreSQL, MySQL, 또는 SQLite 시작하기
- Drizzle Seed에 익숙해지기
예제 1: 외래 키가 있는 부분적으로 노출된 테이블 시딩하기
아래와 같은 시딩 스크립트와 스키마를 사용해 데이터베이스에 데이터를 채우려고 한다고 가정해 보겠습니다.
index.ts
schema.ts
import { bloodPressure } from './schema.ts';
async function main() {
const db = drizzle(...);
await seed(db, { bloodPressure });
}
main();
bloodPressure
테이블의 userId
컬럼에 not null
제약 조건이 있다면, 시딩 스크립트를 실행할 때 다음과 같은 오류가 발생합니다.
Error: 'userId' 컬럼에 not null 제약 조건이 있지만,
'bloodPressure' 테이블의 'userId' 컬럼에 대한 외래 키 테이블을 지정하지 않았습니다.
이것이 무엇을 의미하나요?
이 문제를 해결하기 위해 다음과 같은 방법을 고려할 수 있습니다:
userId
컬럼에서not null
제약 조건을 제거할 수 있습니다.seed
함수 스키마에users
테이블을 노출할 수 있습니다.
await seed(db, { bloodPressure, users });
userId
컬럼 생성기를 조정할 수 있습니다.
예제 2
index.ts
schema.ts
import { bloodPressure } from './schema.ts';
async function main() {
const db = drizzle(...);
await seed(db, { bloodPressure });
}
main();
위의 시딩 스크립트를 실행하면 다음과 같은 경고가 표시됩니다.
'bloodPressure' 테이블의 'userId' 컬럼은 Null 값으로 채워질 것입니다.
왜냐하면 'userId' 컬럼에 대한 외래 키 테이블을 지정하지 않았고,
'refinements'에서 'userId' 컬럼에 대한 함수도 제공하지 않았기 때문입니다.
이것이 무엇을 의미하나요?
이는 seed
함수 스키마에 users
테이블을 제공하지 않았거나, userId
컬럼 생성기를 구체화하지 않았음을 의미합니다.
결과적으로 userId
컬럼은 Null 값으로 채워질 것입니다.
이제 두 가지 선택지가 있습니다:
userId
컬럼을 Null 값으로 채워도 괜찮다면, 경고를 무시할 수 있습니다.- 그렇지 않다면, userId 컬럼 생성기를 구체화할 수 있습니다.
userId
컬럼 생성기 개선하기
이 작업을 수행하려면 데이터베이스의 users
테이블에 이미 1과 2 같은 ID가 존재해야 합니다.
index.ts
import { bloodPressure } from './schema.ts';
async function main() {
const db = drizzle(...);
await seed(db, { bloodPressure }).refine((funcs) => ({
bloodPressure: {
columns: {
userId: funcs.valuesFromArray({ values: [1, 2] })
}
}
}));
}
main();