title: "CREATE TABLE"
description: "CREATE TABLE
creates a table that is persisted in durable storage."
pagerank: 40
menu:
# This should also have a "non-content entry" under Reference, which is
# configured in doc/user/config.toml
main:
parent: 'commands'
CREATE TABLE
defines a table that is persisted in durable storage and can be
written to, updated and seamlessly joined with other tables, views or sources.
Tables in Materialize are similar to tables in standard relational databases:
they consist of rows and columns where the columns are fixed when the table is
created but rows can be added to at will via INSERT
statements.
{{< warning >}} At the moment, tables have many known limitations. In most situations, you should use sources instead. {{< /warning >}}
[//]: # "TODO(morsapaes) Bring back When to use a table? once there's more clarity around best practices."
{{< diagram "create-table.svg" >}}
col_option
{{< diagram "col-option.svg" >}}
Field | Use |
---|---|
TEMP / TEMPORARY | Mark the table as temporary. |
table_name | A name for the table. |
col_name | The name of the column to be created in the table. |
col_type | The data type of the column indicated by col_name. |
NOT NULL | Do not allow the column to contain NULL values. Columns without this constraint can contain NULL values. |
default_expr | A default value to use for the column in an INSERT statement if an explicit value is not provided. If not specified, NULL is assumed. |
with_options
{{< diagram "with-options.svg" >}}
Field | Value | Description |
---|---|---|
PARTITION BY columns | (ident [, ident]*) |
The key by which Materialize should internally partition this durable collection. See the partitioning guide for restrictions on valid values and other details. |
RETAIN HISTORY FOR _retentionperiod | interval |
*Private preview. This option has known performance or stability issues and is under active development.* Duration for which Materialize retains historical data, which is useful to implement durable subscriptions. Accepts positive interval values (e.g. '1hr' ). Default: 1s . |
Tables do not currently support:
See also the known limitations for INSERT
,
UPDATE
, and DELETE
.
The TEMP
/TEMPORARY
keyword creates a temporary table. Temporary tables are
automatically dropped at the end of the SQL session and are not visible to other
connections. They are always created in the special mz_temp
schema.
Temporary tables may depend upon other temporary database objects, but non-temporary tables may not depend on temporary objects.
You can create a table t
with the following statement:
CREATE TABLE t (a int, b text NOT NULL);
Once a table is created, you can inspect the table with various SHOW
commands.
SHOW TABLES;
TABLES
------
t
SHOW COLUMNS IN t;
name nullable type
-------------------------
a true int4
b false text
The privileges required to execute this statement are:
{{< include-md file="shared-content/sql-command-privileges/create-table.md" >}}