Compare branch schemas.

https://{your-workspace-slug}.{region}.xata.sh/db/db_branch_name/schema/compare/branch_name

Compare the schema of any 2 branches.

Expected parameters

NameDescriptionInRequiredSchema
db_branch_name

The DBBranchName matches the pattern {db_name}:{branch_name}.

path✅string
branch_name

The Database Name

path✅string

Compare Branch Schemas.

POST
https://{your-workspace-slug}.{region}.xata.sh/db/db_branch_name/schema/compare/branch_name

Request Body Type Definition

type CompareBranchSchemas = {
    sourceBranchOperations?: MigrationOp[];
    targetBranchOperations?: MigrationOp[];
};
 
/**
 * Branch schema migration operations.
 */
type MigrationOp = MigrationTableOp | MigrationColumnOp;
 
type MigrationTableOp = {
    addTable: TableOpAdd;
} | {
    removeTable: TableOpRemove;
} | {
    renameTable: TableOpRename;
};
 
type MigrationColumnOp = {
    addColumn: ColumnOpAdd;
} | {
    removeColumn: ColumnOpRemove;
} | {
    renameColumn: ColumnOpRename;
};
 
type TableOpAdd = {
    table: string;
};
 
type TableOpRemove = {
    table: string;
};
 
type TableOpRename = {
    oldName: string;
    newName: string;
};
 
type ColumnOpAdd = {
    table: string;
    column: Column;
};
 
type ColumnOpRemove = {
    table: string;
    column: string;
};
 
type ColumnOpRename = {
    table: string;
    oldName: string;
    newName: string;
};
 
type Column = {
    name: string;
    type: "bool" | "int" | "float" | "string" | "text" | "email" | "multiple" | "link" | "object" | "datetime" | "vector" | "file[]" | "file" | "json";
    link?: ColumnLink;
    vector?: ColumnVector;
    file?: ColumnFile;
    ["file[]"]?: ColumnFile;
    notNull?: boolean;
    defaultValue?: string;
    unique?: boolean;
    columns?: Column[];
};
 
type ColumnLink = {
    table: string;
};
 
type ColumnVector = {
    /**
     * @maximum 10000
     * @minimum 2
     */
    dimension: number;
};
 
type ColumnFile = {
    defaultPublicAccess?: boolean;
};

Responses

type CompareBranchSchemas = {
    source: Schema;
    target: Schema;
    edits: SchemaEditScript;
};
 
type Schema = {
    tables: Table[];
    tablesOrder?: string[];
};
 
type SchemaEditScript = {
    sourceMigrationID?: string;
    targetMigrationID?: string;
    operations: MigrationOp[];
};
 
type Table = {
    id?: string;
    name: TableName;
    columns: Column[];
    revLinks?: RevLink[];
};
 
/**
 * Branch schema migration operations.
 */
type MigrationOp = MigrationTableOp | MigrationColumnOp;
 
/**
 * @maxLength 255
 * @minLength 1
 * @pattern [a-zA-Z0-9_\-~]+
 */
type TableName = string;
 
type Column = {
    name: string;
    type: "bool" | "int" | "float" | "string" | "text" | "email" | "multiple" | "link" | "object" | "datetime" | "vector" | "file[]" | "file" | "json";
    link?: ColumnLink;
    vector?: ColumnVector;
    file?: ColumnFile;
    ["file[]"]?: ColumnFile;
    notNull?: boolean;
    defaultValue?: string;
    unique?: boolean;
    columns?: Column[];
};
 
type RevLink = {
    table: string;
    column: string;
};
 
type MigrationTableOp = {
    addTable: TableOpAdd;
} | {
    removeTable: TableOpRemove;
} | {
    renameTable: TableOpRename;
};
 
type MigrationColumnOp = {
    addColumn: ColumnOpAdd;
} | {
    removeColumn: ColumnOpRemove;
} | {
    renameColumn: ColumnOpRename;
};
 
type ColumnLink = {
    table: string;
};
 
type ColumnVector = {
    /**
     * @maximum 10000
     * @minimum 2
     */
    dimension: number;
};
 
type ColumnFile = {
    defaultPublicAccess?: boolean;
};
 
type TableOpAdd = {
    table: string;
};
 
type TableOpRemove = {
    table: string;
};
 
type TableOpRename = {
    oldName: string;
    newName: string;
};
 
type ColumnOpAdd = {
    table: string;
    column: Column;
};
 
type ColumnOpRemove = {
    table: string;
    column: string;
};
 
type ColumnOpRename = {
    table: string;
    oldName: string;
    newName: string;
};