src/content/docs/seed-functions.mdx
import Callout from '@mdx/Callout.astro'; import Tab from "@mdx/Tab.astro"; import Tabs from "@mdx/Tabs.astro";
default| param | default | type | |
|---|---|---|---|
defaultValue | -- | any | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
posts: {
columns: {
content: funcs.default({
// value you want to generate
defaultValue: "post content",
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
valuesFromArray| param | default | type | |
|---|---|---|---|
values | -- | any[] | { weight: number; values: any[] }[] | |
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ posts: { columns: { title: funcs.valuesFromArray({ // Array of values you want to generate (can be an array of weighted values) values: ["Title1", "Title2", "Title3", "Title4", "Title5"],
// Property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
### `intPrimaryKey`
<rem025 />
Generates sequential integers starting from 1.
| | param | default | type
|:-| :-------- | :-------- | :--------
| |-- |-- |--
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
posts: {
columns: {
id: funcs.intPrimaryKey(),
},
},
}));
number| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
precision | 100 | number | |
maxValue | `precision * 1000` if isUnique equals false `precision * count` if isUnique equals true | number | |
minValue | -maxValue | number | |
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ products: { columns: { unitPrice: funcs.number({ // lower border of range. minValue: 10,
// upper border of range.
maxValue: 120,
// precision of generated number:
// precision equals 10 means that values will be accurate to one tenth (1.2, 34.6);
// precision equals 100 means that values will be accurate to one hundredth (1.23, 34.67).
precision: 100,
// property that controls if generated values gonna be unique or not.
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
### `int`
<rem025 />
Generates integers within the given range
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`isUnique` |`database column uniqueness` |`boolean`
| |`maxValue` |``` `1000` if isUnique equals false``` ``` `count * 10` if isUnique equals true``` |`number \| bigint`
| |`minValue` |`-maxValue` |`number \| bigint`
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
products: {
columns: {
unitsInStock: funcs.int({
// lower border of range.
minValue: 0,
// lower border of range.
maxValue: 100,
// property that controls if generated values gonna be unique or not.
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
boolean| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ users: { columns: { isAvailable: funcs.boolean({ // number of elements in each one-dimensional array. // (If specified, arrays will be generated.) arraySize: 3 }), }, }, }));
### `date`
<rem025 />
Generates a date within the given range
| | param | default | type
|:-| :-------- | :-------------- | :--------
| |`minDate` |`new Date('2020-05-08')` | `string \| Date`
| |`maxDate` |`new Date('2028-05-08')` | `string \| Date`
| |`arraySize` |-- |`number`
<Callout type='warning'>
If only one of the parameters (`minDate` or `maxDate`) is provided, the unspecified parameter will be calculated by adding or subtracting 8 years to/from the specified one
</Callout>
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
birthDate: funcs.date({
// lower border of range.
minDate: "1990-01-01",
// upper border of range.
maxDate: "2010-12-31",
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
time| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ users: { columns: { birthTime: funcs.time({ // number of elements in each one-dimensional array. // (If specified, arrays will be generated.) arraySize: 3 }), }, }, }));
### `timestamp`
<rem025 />
Generates timestamps
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
orders: {
columns: {
shippedDate: funcs.timestamp({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
datetime| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ orders: { columns: { shippedDate: funcs.datetime({ // number of elements in each one-dimensional array. // (If specified, arrays will be generated.) arraySize: 3 }), }, }, }));
### `year`
<rem025 />
Generates years in `YYYY` format
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
birthYear: funcs.year({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
json{ email, name, isGraduated, hasJob, salary, startedWorking, visitedCountries}
// or
{ email, name, isGraduated, hasJob, visitedCountries }
The JSON structure will be picked randomly
| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({ users: { columns: { metadata: funcs.json({ // number of elements in each one-dimensional array. // (If specified, arrays will be generated.) arraySize: 3 }), }, }, }));
### `interval`
<rem025 />
Generates time intervals.
Example of a generated value: `1 year 12 days 5 minutes`
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`isUnique` |`database column uniqueness` |`boolean`
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
timeSpentOnWebsite: funcs.interval({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
string| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
hashedPassword: funcs.string({
// isUnique - property that controls whether the generated values will be unique or not
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
### `uuid`
<rem025 />
Generates v4 UUID strings
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
products: {
columns: {
id: funcs.uuid({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
firstName| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
firstName: funcs.firstName({
// isUnique - property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
### `lastName`
<rem025 />
Generates a person's last name
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`isUnique` |`database column uniqueness` |`boolean`
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
lastName: funcs.lastName({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
fullName| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
fullName: funcs.fullName({
// isUnique - property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
### `email`
<rem025 />
Generates unique email addresses
| | param | default | type
|:-| :-------- | :-------- | :--------
| |`arraySize` |-- |`number`
<rem025 />
```ts
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
email: funcs.email({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
phoneNumber| param | default | type | |
|---|---|---|---|
template | -- | string | |
prefixes | Used dataset for prefixes | string[] | |
generatedDigitsNumbers | 7 - if prefixes was defined | number | number[] | |
arraySize | -- | number |
//generate phone number using template property
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
phoneNumber: funcs.phoneNumber({
// template - phone number template, where all '#' symbols will be substituted with generated digits.
template: "+(380) ###-####",
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
}, }));
```ts
import { seed } from "drizzle-seed";
//generate phone number using prefixes and generatedDigitsNumbers properties
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
phoneNumber: funcs.phoneNumber({
// `prefixes` - array of any string you want to be your phone number prefixes.(not compatible with `template` property)
prefixes: ["+380 99", "+380 67"],
// `generatedDigitsNumbers` - number of digits that will be added at the end of prefixes.(not compatible with `template` property)
generatedDigitsNumbers: 7,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
import { seed } from "drizzle-seed";
// generate phone number using prefixes and generatedDigitsNumbers properties but with different generatedDigitsNumbers for prefixes
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
phoneNumber: funcs.phoneNumber({
// `prefixes` - array of any string you want to be your phone number prefixes.(not compatible with `template` property)
prefixes: ["+380 99", "+380 67", "+1"],
// `generatedDigitsNumbers` - number of digits that will be added at the end of prefixes.(not compatible with `template` property)
generatedDigitsNumbers: [7, 7, 10],
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
country| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
country: funcs.country({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
city| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
city: funcs.city({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
streetAddress| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
streetAddress: funcs.streetAddress({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: false,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
jobTitle| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
jobTitle: funcs.jobTitle({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
postcode| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
postcode: funcs.postcode({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
state| param | default | type | |
|---|---|---|---|
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
state: funcs.state({
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
companyName| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
users: {
columns: {
company: funcs.companyName({
// `isUnique` - property that controls whether the generated values will be unique or not
isUnique: true,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
loremIpsum| param | default | type | |
|---|---|---|---|
sentencesCount | 1 | number | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
posts: {
columns: {
content: funcs.loremIpsum({
// `sentencesCount` - number of sentences you want to generate as one generated value(string).
sentencesCount: 2,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
point| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
maxXValue | `10 * 1000` if isUnique equals false `10 * count` if isUnique equals true | number | |
minXValue | -maxXValue | number | |
maxYValue | `10 * 1000` if isUnique equals false `10 * count` if isUnique equals true | number | |
minYValue | -maxYValue | number | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
triangles: {
columns: {
pointCoords: funcs.point({
// `isUnique` - property that controls if generated values gonna be unique or not.
isUnique: true,
// `minXValue` - lower bound of range for x coordinate.
minXValue: -5,
// `maxXValue` - upper bound of range for x coordinate.
maxXValue: 20,
// `minYValue` - lower bound of range for y coordinate.
minYValue: 0,
// `maxYValue` - upper bound of range for y coordinate.
maxYValue: 30,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
lineline equation: a*x + b*y + c = 0
| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
maxAValue | `10 * 1000` if isUnique equals false `10 * count` if isUnique equals true | number | |
minAValue | -maxAValue | number | |
maxBValue | `10 * 1000` if isUnique equals false `10 * count` if isUnique equals true | number | |
minBValue | -maxBValue | number | |
maxCValue | `10 * 1000` if isUnique equals false `10 * count` if isUnique equals true | number | |
minCValue | -maxCValue | number | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
lines: {
columns: {
lineParams: funcs.point({
// `isUnique` - property that controls if generated values gonna be unique or not.
isUnique: true,
// `minAValue` - lower bound of range for a parameter.
minAValue: -5,
// `maxAValue` - upper bound of range for x parameter.
maxAValue: 20,
// `minBValue` - lower bound of range for y parameter.
minBValue: 0,
// `maxBValue` - upper bound of range for y parameter.
maxBValue: 30,
// `minCValue` - lower bound of range for y parameter.
minCValue: 0,
// `maxCValue` - upper bound of range for y parameter.
maxCValue: 10,
// number of elements in each one-dimensional array.
// (If specified, arrays will be generated.)
arraySize: 3
}),
},
},
}));
bitString| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
dimensions | database column bit-length | number | |
arraySize | -- | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
bitStringTable: {
columns: {
bit: funcs.bitString({
// desired length of each bit string (e.g., `dimensions = 3` produces values like `'010'`).
dimensions: 12,
// property that controls if generated values gonna be unique or not;
isUnique: true,
// number of elements in each one-dimensional array (If specified, arrays will be generated);
arraySize: 3,
}),
},
},
}));
inet| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number | |
ipAddress | 'ipv4' | 'ipv4' | 'ipv6' | |
includeCidr | true | boolean |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
inetTable: {
columns: {
inet: funcs.inet({
// property that controls if generated values gonna be unique or not;
isUnique: true,
// number of elements in each one-dimensional array (If specified, arrays will be generated);
arraySize: 3,
// type of IP address to generate — either "ipv4" or "ipv6";
ipAddress: "ipv4",
// determines whether generated IPs include a CIDR suffix.
includeCidr: true,
}),
},
},
}));
geometryThis bug is already in the backlog.
<Callout title="❌"> ```ts {13} import { seed } from "drizzle-seed"; import { geometry, pgTable } from 'drizzle-orm/pg-core';const geometryTable = pgTable('geometry_table', { geometryArray: geometry('geometry_array', { type: 'point', srid: 0 }).array(3), });
await seed(db, { geometryTable }, { count: 1000 }).refine((funcs) => ({ geometryTable: { columns: { geometryArray: funcs.geometry({ // currently arraySize with values > 1 are not supported arraySize: 3, }), }, }, }));
</Callout>
<Callout title='✅'>
```ts {13}
import { seed } from "drizzle-seed";
import { geometry, pgTable } from 'drizzle-orm/pg-core';
const geometryTable = pgTable('geometry_table', {
geometryArray: geometry('geometry_array', { type: 'point', srid: 0 }).array(1),
});
await seed(db, { geometryTable }, { count: 1000 }).refine((funcs) => ({
geometryTable: {
columns: {
geometryArray: funcs.geometry({
// will work as expected
arraySize: 1,
}),
},
},
}));
This bug is already in the backlog.
<Callout title="❌"> ```ts {5} import { seed } from "drizzle-seed"; import { geometry, pgTable } from 'drizzle-orm/pg-core';const geometryTable = pgTable('geometry_table', { geometryColumn: geometry('geometry_column', { type: 'point', srid: 4326 }), });
await seed(db, { geometryTable }, { count: 1000 }).refine((funcs) => ({ geometryTable: { columns: { geometryColumn: funcs.geometry({ srid: 4326, }), }, }, }));
</Callout>
<Callout title='✅'>
```ts {5}
import { seed } from "drizzle-seed";
import { geometry, pgTable } from 'drizzle-orm/pg-core';
const geometryTable = pgTable('geometry_table', {
geometryColumn: geometry('geometry_column', { type: 'point', srid: 0 }),
});
await seed(db, { geometryTable }, { count: 1000 }).refine((funcs) => ({
geometryTable: {
columns: {
geometryColumn: funcs.geometry({
srid: 4326,
}),
},
},
}));
| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number | |
type | 'point' | 'point' | |
srid | 4326 | 4326 | 3857 | |
decimalPlaces | 6 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
geometryTable: {
columns: {
geometryPointTuple: funcs.geometry({
// property that controls if generated values gonna be unique or not;
isUnique: true,
// number of elements in each one-dimensional array (If specified, arrays will be generated);
arraySize: 1,
// geometry type to generate; currently only `'point'` is supported;
type: "point",
// Spatial Reference System Identifier: determines what type of point will be generated - either `4326` or `3857`;
srid: 4326,
// number of decimal places for points when `srid` is `4326` (e.g., `decimalPlaces = 3` produces values like `'point(30.723 46.482)'`).
decimalPlaces: 5,
}),
},
},
}));
vector| param | default | type | |
|---|---|---|---|
isUnique | database column uniqueness | boolean | |
arraySize | -- | number | |
decimalPlaces | 2 | number | |
dimensions | database column’s dimensions | number | |
minValue | -1000 | number | |
maxValue | 1000 | number |
import { seed } from "drizzle-seed";
await seed(db, schema, { count: 1000 }).refine((funcs) => ({
vectorTable: {
columns: {
vector: funcs.vector({
// property that controls if generated values gonna be unique or not;
isUnique: true,
// number of elements in each one-dimensional array (If specified, arrays will be generated);
arraySize: 3,
// number of decimal places for each vector element (e.g., `decimalPlaces = 3` produces values like `1.123`);
decimalPlaces: 5,
// number of elements in each generated vector (e.g., `dimensions = 3` produces values like `[1,2,3]`);
dimensions: 12,
// minimum allowed value for each vector element;
minValue: -100,
// maximum allowed value for each vector element.
maxValue: 100,
}),
},
},
}));