commit.md 2.1 KB


title: "COMMIT" description: "COMMIT ends a transaction block and commits all changes if the transaction statements succeed." menu: main:

parent: "commands"

COMMIT ends the current transaction. Upon the COMMIT statement:

  • If all transaction statements succeed, all changes are committed.

  • If an error occurs, all changes are discarded; i.e., rolled back.

Syntax

COMMIT;

Details

{{% txns/txn-details %}}

Transactions in Materialize are either read-only transactions or write-only (more specifically, insert-only) transactions.

For a write-only (i.e., insert-only) transaction, all statements in the transaction are committed at the same timestamp.

Examples

Commit a write-only transaction {#write-only-transactions}

In Materialize, write-only transactions are insert-only transactions.

{{% txns/txn-insert-only %}}

Commit a read-only transaction

In Materialize, read-only transactions can be either:

  • a SELECT only transaction that only contains SELECT statements or

  • a SUBSCRIBE-based transactions that only contains a singleDECLARE ... CURSOR FOR statement followed by subsequent FETCH statement(s).

For example:

BEGIN;
DECLARE c CURSOR FOR SUBSCRIBE (SELECT * FROM flippers);

-- Subsequent queries must only FETCH from the cursor

FETCH 10 c WITH (timeout='1s');
FETCH 20 c WITH (timeout='1s');
COMMIT;

During the first query, a timestamp is chosen that is valid for all of the objects referenced in the query. This timestamp will be used for all other queries in the transaction.

{{< note >}} The transaction will additionally hold back normal compaction of the objects, potentially increasing memory usage for very long running transactions. {{</ note >}}

See also