Appwrite.Services.TablesDB (appwrite v1.0.0)

View Source

The TablesDB service provides a structured, SQL-like data storage layer on top of Appwrite — separate from the document-oriented Database service.

This is an entirely new Appwrite Cloud service added in v1.0.0.

TablesDB exposes tables, columns, and rows with typed constraints, making it suitable for workloads that require strict schemas and relational-style queries.

Hierarchy

Project
 Table
     Column (schema definition)
     Row (data)

Summary

Functions

Delete a Column by its unique ID.

Delete a Row by its unique ID.

Delete a Table by its unique ID.

Get a Column by its unique ID.

Get a Row by its unique ID.

Get a Table by its unique ID.

List all Columns for a Table.

List Rows in a Table.

List all Tables in the project.

Update a Column — change required/default/size constraints.

Upsert a Row (create or update atomically).

Functions

create_column(table_id, column_id, type, opts \\ [])

@spec create_column(String.t(), String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, any()}

Create a new Column in a Table.

Parameters

  • table_id (required)
  • column_id (required) – unique column key
  • type (required) – data type: "string", "integer", "float", "boolean", "datetime", "email", "url", "ip", "enum", etc.
  • opts keyword list:
    • :required – boolean (default false)
    • :default – default value
    • :array – when true, stores a list of the given type
    • :size – max length for string columns
    • :min – minimum value for numeric columns
    • :max – maximum value for numeric columns
    • :elements – list of allowed values for enum columns
    • :format – format hint (e.g. "email", "url", "ip")

create_row(table_id, row_id, data \\ nil, permissions \\ nil)

@spec create_row(String.t(), String.t(), map() | nil, [String.t()] | nil) ::
  {:ok, map()} | {:error, any()}

Create a new Row in a Table.

Parameters

  • table_id (required)
  • row_id (required) – unique identifier; use "unique()" to auto-generate
  • data (optional) – map of column keys → values
  • permissions (optional)

create_table(table_id, name, permissions \\ nil, document_security \\ nil)

@spec create_table(String.t(), String.t(), [String.t()] | nil, boolean() | nil) ::
  {:ok, map()} | {:error, any()}

Create a new Table.

Parameters

  • table_id (required) – unique identifier; use "unique()" to auto-generate
  • name (required) – human-readable table name
  • permissions (optional) – list of permission strings
  • document_security (optional) – when true, enables per-row security

delete_column(table_id, column_id)

@spec delete_column(String.t(), String.t()) :: {:ok, map()} | {:error, any()}

Delete a Column by its unique ID.

Parameters

  • table_id (required)
  • column_id (required)

delete_row(table_id, row_id)

@spec delete_row(String.t(), String.t()) :: {:ok, map()} | {:error, any()}

Delete a Row by its unique ID.

Parameters

  • table_id (required)
  • row_id (required)

delete_table(table_id)

@spec delete_table(String.t()) :: {:ok, map()} | {:error, any()}

Delete a Table by its unique ID.

Parameters

  • table_id (required)

get_column(table_id, column_id)

@spec get_column(String.t(), String.t()) :: {:ok, map()} | {:error, any()}

Get a Column by its unique ID.

Parameters

  • table_id (required)
  • column_id (required)

get_row(table_id, row_id)

@spec get_row(String.t(), String.t()) :: {:ok, map()} | {:error, any()}

Get a Row by its unique ID.

Parameters

  • table_id (required)
  • row_id (required)

get_table(table_id)

@spec get_table(String.t()) :: {:ok, map()} | {:error, any()}

Get a Table by its unique ID.

Parameters

  • table_id (required)

list_columns(table_id, queries \\ nil)

@spec list_columns(String.t(), [String.t()] | nil) :: {:ok, map()} | {:error, any()}

List all Columns for a Table.

Parameters

  • table_id (required)
  • queries (optional)

list_rows(table_id, queries \\ nil)

@spec list_rows(String.t(), [String.t()] | nil) :: {:ok, map()} | {:error, any()}

List Rows in a Table.

Parameters

  • table_id (required)
  • queries (optional)

list_tables(queries \\ nil, search \\ nil)

@spec list_tables([String.t()] | nil, String.t() | nil) ::
  {:ok, map()} | {:error, any()}

List all Tables in the project.

Parameters

  • queries (optional)
  • search (optional)

update_column(table_id, column_id, opts \\ [])

@spec update_column(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, any()}

Update a Column — change required/default/size constraints.

Note: the column type cannot be changed after creation.

Parameters

  • table_id (required)
  • column_id (required)
  • opts keyword list – any subset of the fields from create_column/4

update_row(table_id, row_id, data \\ nil, permissions \\ nil)

@spec update_row(String.t(), String.t(), map() | nil, [String.t()] | nil) ::
  {:ok, map()} | {:error, any()}

Update a Row by its unique ID.

Parameters

  • table_id (required)
  • row_id (required)
  • data (optional) – map of column keys → new values
  • permissions (optional)

update_table(table_id, name, permissions \\ nil, document_security \\ nil)

@spec update_table(String.t(), String.t(), [String.t()] | nil, boolean() | nil) ::
  {:ok, map()} | {:error, any()}

Update a Table's name and/or permissions.

Parameters

  • table_id (required)
  • name (required) – new table name
  • permissions (optional)
  • document_security (optional)

upsert_row(table_id, row_id, data \\ nil, permissions \\ nil)

@spec upsert_row(String.t(), String.t(), map() | nil, [String.t()] | nil) ::
  {:ok, map()} | {:error, any()}

Upsert a Row (create or update atomically).

Parameters

  • table_id (required)
  • row_id (required)
  • data (optional)
  • permissions (optional)