INSERT
INSERT writes values to user-defined tables.
Syntax
INSERT INTO <table_name> [[AS] <alias>] [ ( <col1> [, ...] ) ]
VALUES ( <expr1> [, ...] ) [, ...] | DEFAULT VALUES | <query>
[RETURNING <output_expr | *> [, ...] ]
| Syntax element | Description |
|---|---|
<table_name>
|
The table to write values to. |
<col1> [, ...]
|
Correlates the inserted rows’ columns to If some but not all of |
VALUES ( <expr1> [, ...] ) [, ...]
|
A list of tuples ( <expr1> [, ...] ) [, ...] to insert. Each tuple contains expressions or values to be inserted into the columns. If a given column is nullable, a NULL value may be provided.
|
DEFAULT VALUES
|
Insert a single row using the default value for all columns. |
<query>
|
A SELECT statement whose returned rows you want to write to the table.
|
RETURNING <output_expr | *> [, ...]
|
Causes
|
Details
Known limitations
INSERT ... SELECTcan reference read-write tables but not sources or read-only tables (or views, materialized views, and indexes that depend on sources).- Low performance. While processing an
INSERT ... SELECTstatement, Materialize cannot process otherINSERT,UPDATE, orDELETEstatements.
Examples
To insert data into a table, execute an INSERT statement where the VALUES clause
is followed by a list of tuples. Each tuple in the VALUES clause must have a value
for each column in the table. If a column is nullable, a NULL value may be provided.
CREATE TABLE t (a int, b text NOT NULL);
INSERT INTO t VALUES (1, 'a'), (NULL, 'b');
SELECT * FROM t;
a | b
---+---
| b
1 | a
In the above example, the second tuple provides a NULL value for column a, which
is nullable. NULL values may not be inserted into column b, which is not nullable.
You may also insert data using a column specification.
CREATE TABLE t (a int, b text NOT NULL);
INSERT INTO t (b, a) VALUES ('a', 1), ('b', NULL);
SELECT * FROM t;
a | b
---+---
| b
1 | a
You can also insert the values returned from SELECT statements:
CREATE TABLE s (a text);
INSERT INTO s VALUES ('c');
INSERT INTO t (b) SELECT * FROM s;
SELECT * FROM t;
a | b
---+---
| b
| c
1 | a
Privileges
The privileges required to execute this statement are:
USAGEprivileges on the schemas that all relations and types in the query are contained in.INSERTprivileges ontable_name.SELECTprivileges on all relations in the query.- NOTE: if any item is a view, then the view owner must also have the necessary privileges to execute the view definition. Even if the view owner is a superuser, they still must explicitly be granted the necessary privileges.
USAGEprivileges on all types used in the query.USAGEprivileges on the active cluster.