Skip to main content

Create Column

Add new columns to existing tables with full control over data types, constraints, and properties.

create()

Create a single column in an existing table.

client.columns.create(tableName: string, column: FieldDefinition): Promise<BolticSuccessResponse<ColumnRecord> | BolticErrorResponse>

Parameters

ParameterTypeRequiredDescription
tableNamestringName of the target table
columnFieldDefinitionColumn definition object

FieldDefinition Properties

PropertyTypeRequiredDescription
namestringColumn name (alphanumeric + underscore)
typeFieldTypeColumn data type
descriptionstringHuman-readable description
is_nullablebooleanAllow null values (default: true)
is_uniquebooleanEnforce unique values (default: false)
is_indexedbooleanCreate database index (default: false)
is_visiblebooleanShow in UI (default: true)
default_valueanyDefault value for new records

Examples

Basic Text Column

const { data, error } = await client.columns.create("products", {
name: "title",
type: "text",
is_nullable: false,
is_indexed: true,
description: "Product title",
});

if (!error) {
console.log("Column created:", data.name);
}

Currency Column

const { data, error } = await client.columns.create("products", {
name: "price",
type: "currency",
currency_format: "USD",
decimals: "0.00",
is_nullable: false,
default_value: 0.0,
description: "Product price in USD",
});
const { data, error } = await client.columns.create("products", {
name: "category",
type: "dropdown",
selectable_items: ["Electronics", "Clothing", "Books", "Home & Garden"],
multiple_selections: false,
is_nullable: false,
description: "Product category",
});

Date-Time Column

const { data, error } = await client.columns.create("events", {
name: "event_date",
type: "date-time",
date_format: "%d/%m/%Y",
time_format: "HH:mm:ss",
is_nullable: true,
description: "Event start date and time",
});

Vector Column for AI/ML

const { data, error } = await client.columns.create("documents", {
name: "embeddings",
type: "vector",
vector_dimension: 1536,
is_indexed: true,
description: "Document embeddings for similarity search",
});

Response Format

{
data: {
id: "26b364ef-0401-49b2-aae3-ebe43ae14eca",
},
"message": "Column embeddings added successfully"
}

createMany()

Create multiple columns in a single operation for better performance.

client.columns.createMany(tableName: string, columns: FieldDefinition[]): Promise<BolticListResponse<ColumnRecord> | BolticErrorResponse>

Parameters

ParameterTypeRequiredDescription
tableNamestringName of the target table
columnsFieldDefinition[]Array of column definitions

Example: User Profile Schema

const userColumns = [
{
name: "first_name",
type: "text",
is_nullable: false,
description: "User first name",
},
{
name: "last_name",
type: "text",
is_nullable: false,
description: "User last name",
},
{
name: "email",
type: "email",
is_unique: true,
is_nullable: false,
is_indexed: true,
description: "User email address",
},
{
name: "phone",
type: "phone-number",
phone_format: "+1 (123) 456-7890",
is_nullable: true,
description: "User phone number",
},
{
name: "age",
type: "number",
decimals: "0",
is_nullable: true,
description: "User age",
},
{
name: "is_verified",
type: "checkbox",
default_value: false,
description: "Whether user is verified",
},
{
name: "profile_data",
type: "json",
is_nullable: true,
description: "Additional profile information",
},
];

const { data, error } = await client.columns.createMany("users", userColumns);

if (!error) {
console.log(`Created ${data.length} columns successfully`);
data.forEach((column) => {
console.log(`- ${column.name} (${column.type})`);
});
}

Example: E-commerce Product Schema

const productColumns = [
{
name: "title",
type: "text",
is_nullable: false,
is_unique: true,
is_indexed: true,
description: "Product title",
},
{
name: "description",
type: "long-text",
is_nullable: true,
description: "Product description",
},
{
name: "price",
type: "currency",
currency_format: "USD",
decimals: "0.00",
is_nullable: false,
is_indexed: true,
description: "Product price",
},
{
name: "sale_price",
type: "currency",
currency_format: "USD",
decimals: "0.00",
is_nullable: true,
description: "Sale price if on discount",
},
{
name: "sku",
type: "text",
is_unique: true,
is_nullable: false,
is_indexed: true,
description: "Stock keeping unit",
},
{
name: "category",
type: "dropdown",
selection_source: "provide-static-list",
selectable_items: ["Electronics", "Clothing", "Books", "Home & Garden"],
multiple_selections: false,
is_nullable: false,
description: "Product category",
},
{
name: "tags",
type: "dropdown",
selection_source: "provide-static-list",
selectable_items: ["new", "bestseller", "sale", "limited"],
multiple_selections: true,
is_nullable: true,
description: "Product tags",
},
{
name: "is_active",
type: "checkbox",
default_value: true,
description: "Whether product is active",
},
{
name: "launch_date",
type: "date-time",
timezone: "UTC",
date_format: "MM/DD/YYYY",
is_nullable: true,
description: "Product launch date",
},
{
name: "specifications",
type: "json",
is_nullable: true,
description: "Product specifications and features",
},
];

const { data, error } = await client.columns.createMany("products", productColumns);

Type-Specific Properties

Different field types require additional properties:

Currency Fields

{
name: 'price',
type: 'currency',
currency_format: 'USD', // Required: ISO currency code
decimals: '0.00', // Optional: decimal precision
}

Phone Number Fields

{
name: 'phone',
type: 'phone-number',
phone_format: '+1 (123) 456-7890' // Required: display format
}
{
name: 'status',
type: 'dropdown',
selectable_items: ['active', 'inactive'], // Required
multiple_selections: false // Required
}

Date-Time Fields

{
name: 'created_date',
type: 'date-time',
date_format: 'MM/DD/YYYY', // Optional
time_format: 'HH:mm:ss' // Optional
}

Vector Fields

{
name: 'embeddings',
type: 'vector',
vector_dimension: 1536 // Required: dimension size
}

Validation Rules

Column Names

  • Must contain only letters, numbers, and underscores
  • Cannot start with a number
  • Cannot be a reserved keyword (id, created_at, updated_at)
  • Maximum length: 63 characters

Non-Nullable Columns

info

Cannot create columns with is_nullable: false on tables that already contain rows

To add a non-nullable column to a table with existing data, you must first delete all rows from the table.

Best Practices

Column Design

  • Use descriptive names that clearly indicate the column's purpose
  • Set appropriate constraints (is_nullable, is_unique, is_indexed)
  • Choose the most specific data type for your use case
  • Consider performance impact of indexing

Default Values

  • Use null as default for optional fields
  • Ensure default values match the column type

Bulk Creation

  • Use createMany() for multiple columns to improve performance
  • Group related columns together logically
  • Validate all column definitions before bulk creation