버전 관리

drizzle-seedλŠ” 정적 및 동적 데이터에 λŒ€ν•œ 좜λ ₯을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ 버전 관리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ§„μ •ν•œ 결정둠을 보μž₯ν•˜λ €λ©΄ λ™μΌν•œ seed 번호λ₯Ό μ‚¬μš©ν•  λ•Œ 값이 λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 정적 데이터 μ†ŒμŠ€ λ˜λŠ” 동적 데이터 생성 둜직이 λ³€κ²½λ˜λ©΄ 버전이 μ—…λ°μ΄νŠΈλ˜μ–΄ 이전 버전을 μœ μ§€ν• μ§€ μ΅œμ‹  버전을 μ‚¬μš©ν• μ§€ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•„μš”ν•œ 경우 이전 λ²„μ „μœΌλ‘œ 결정둠적 좜λ ₯을 μœ μ§€ν•˜λ©΄μ„œ μΆ”κ°€ 생성기와 같은 μƒˆλ‘œμš΄ κΈ°λŠ₯을 μœ„ν•΄ μ΅œμ‹  drizzle-seed λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯에 μ•‘μ„ΈμŠ€ν•˜λŠ” λ™μ‹œμ— 기쑴의 결정둠적 데이터에 μ˜μ‘΄ν•΄μ•Ό ν•  λ•Œ 특히 μœ μš©ν•©λ‹ˆλ‹€.

await seed(db, schema, { version: '2' });

νžˆμŠ€ν† λ¦¬

api versionnpm versionChanged generators
v10.1.1
v2 (LTS) 0.2.1string(), interval({ isUnique: true })

λ‚΄λΆ€ μž‘λ™ 방식은?

이것은 μ‹€μ œ API 변경이 μ•„λ‹ˆλ©°, drizzle-seed 버전 관리λ₯Ό μ§„ν–‰ν•˜λŠ” λ°©λ²•μ˜ μ˜ˆμ‹œμΌ λΏμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, lastName 생성기가 λ³€κ²½λ˜κ³  이 μƒμ„±κΈ°μ˜ μƒˆ 버전인 V2κ°€ μ‚¬μš© κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.

λ‚˜μ€‘μ— firstName 생성기가 λ³€κ²½λ˜μ–΄ 이 μƒμ„±κΈ°μ˜ V3 버전이 μ‚¬μš© κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.

V1V2V3(latest)
LastNameGenLastNameGenV1LastNameGenV2
FirstNameGenFirstNameGenV1FirstNameGenV3
버전 3의 firstName 생성기와 버전 2의 lastName 생성기λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€
await seed(db, schema);

μ΅œμ‹  생성기 버전을 μ¦‰μ‹œ μ‚¬μš©ν•  μ€€λΉ„κ°€ λ˜μ§€ μ•Šμ€ 경우 μ‚¬μš©ν•  μ΅œλŒ€ 버전을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€

버전 1의 firstName 생성기와 버전 2의 lastName 생성기λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€
await seed(db, schema, { version: '2' });
버전 1의 firstName 생성기와 버전 1의 lastName 생성기λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
await seed(db, schema, { version: '1' });

버전 2

고유 interval 생성기가 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€

μ—…κ·Έλ ˆμ΄λ“œ 이유

이전 λ²„μ „μ˜ μƒμ„±κΈ°λŠ” 1 minute 60 seconds 및 2 minutes 0 seconds와 같은 간격을 생성할 수 있으며 이λ₯Ό λ³„κ°œμ˜ κ°„κ²©μœΌλ‘œ μ·¨κΈ‰ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 1 minute 60 seconds 간격이 PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€μ— μ‚½μž…λ˜λ©΄ μžλ™μœΌλ‘œ 2 minutes 0 seconds둜 λ³€ν™˜λ©λ‹ˆλ‹€. 결과적으둜 이후 고유 μ»¬λŸΌμ— 2 minutes 0 seconds 간격을 μ‚½μž…ν•˜λ €κ³  ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€

ν…Œμ΄λΈ”μ— interval νƒ€μž…μ˜ 고유 컬럼이 ν¬ν•¨λœ 경우 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€:

PostgreSQL
import { drizzle } from "drizzle-orm/node-postgres";
import { pgTable, interval } from "drizzle-orm/pg-core";
import { seed } from "drizzle-seed";

const intervals = pgTable("intervals", {
    interval: interval().unique()
});

async function main() {
  const db = drizzle(process.env.DATABASE_URL!);

  await seed(db, { intervals });
}

main();

μ•„λž˜ μŠ€ν¬λ¦½νŠΈμ— ν‘œμ‹œλœ λŒ€λ‘œ μ‹œλ”© μŠ€ν¬λ¦½νŠΈμ—μ„œ 고유 interval 생성기λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€:

PostgreSQL
MySQL
SQLite
import { drizzle } from "drizzle-orm/node-postgres";
import { pgTable, interval, char, varchar, text } from "drizzle-orm/pg-core";
import { seed } from "drizzle-seed";

const intervals = pgTable("intervals", {
    interval: interval().unique(),
    interval1: interval(),
    interval2: char({ length: 256 }).unique(),
    interval3: char({ length: 256 }),
    interval4: varchar().unique(),
    interval5: varchar(),
    interval6: text().unique(),
    interval7: text(),
});

async function main() {
  const db = drizzle(process.env.DATABASE_URL!);

  await seed(db, { intervals }).refine((f) => ({
    intervals: {
        columns: {
            interval: f.interval({ isUnique: true }),
            interval1: f.interval({ isUnique: true }),
            interval2: f.interval({ isUnique: true }),
            interval3: f.interval({ isUnique: true }),
            interval4: f.interval({ isUnique: true }),
            interval5: f.interval({ isUnique: true }),
            interval6: f.interval({ isUnique: true }),
            interval7: f.interval({ isUnique: true }),
        }
    }
  }));
}

main();

string 생성기가 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€: κ³ μœ ν•˜μ§€ μ•Šμ€ 생성기와 고유 생성기 λͺ¨λ‘

μ—…κ·Έλ ˆμ΄λ“œ 이유

ν…μŠ€νŠΈ 컬럼의 길이(예: varchar(20))λ₯Ό 기반으둜 고유 λ¬Έμžμ—΄μ„ 생성할 수 μžˆλŠ” κΈ°λŠ₯

μ΅œλŒ€ 길이 λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” ν…μŠ€νŠΈ μœ ν˜•μ˜ μ»¬λŸΌμ΄λ‚˜ ν…μŠ€νŠΈ μœ ν˜•μ˜ 고유 컬럼이 ν…Œμ΄λΈ”μ— ν¬ν•¨λœ 경우 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€:

PostgreSQL
MySQL
SQLite
import { drizzle } from "drizzle-orm/node-postgres";
import { pgTable, char, varchar, text } from "drizzle-orm/pg-core";
import { seed } from "drizzle-seed";

const strings = pgTable("strings", {
    string2: char({ length: 256 }).unique(),
    string3: char({ length: 256 }),
    string4: varchar().unique(),
    string5: varchar({ length: 256 }).unique(),
    string6: varchar({ length: 256 }),
    string7: text().unique(),
});

async function main() {
  const db = drizzle(process.env.DATABASE_URL!);

  await seed(db, { strings });
}

main();

μ•„λž˜ μŠ€ν¬λ¦½νŠΈμ— ν‘œμ‹œλœ λŒ€λ‘œ μ‹œλ”© μŠ€ν¬λ¦½νŠΈμ—μ„œ string 생성기λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€:

PostgreSQL
MySQL
SQLite
import { drizzle } from "drizzle-orm/node-postgres";
import { pgTable, char, varchar, text } from "drizzle-orm/pg-core";
import { seed } from "drizzle-seed";

const strings = pgTable("strings", {
    string1: char({ length: 256 }).unique(),
    string2: char({ length: 256 }),
    string3: char({ length: 256 }),
    string4: varchar(),
    string5: varchar().unique(),
    string6: varchar({ length: 256 }).unique(),
    string7: varchar({ length: 256 }),
    string8: varchar({ length: 256 }),
    string9: text().unique(),
    string10: text(),
});

async function main() {
  const db = drizzle(process.env.DATABASE_URL!);

  await seed(db, { strings }).refine((f) => ({
    strings: {
        columns: {
            string1: f.string({ isUnique: true }),
            string2: f.string(),
            string3: f.string({ isUnique: true }),
            string4: f.string({ isUnique: true }),
            string5: f.string({ isUnique: true }),
            string6: f.string({ isUnique: true }),
            string7: f.string(),
            string8: f.string({ isUnique: true }),
            string9: f.string({ isUnique: true }),
            string10: f.string({ isUnique: true }),
        }
    }
  }));
}

main();