To create a generated column, use the AS <generation_expression> clause in CREATE TABLE or CREATE SOURCE statements, for example:

CREATE TABLE t1 (v1 int AS v2-1, v2 int, v3 int AS v2+1);
  • A generation expression cannot reference another generated column.
  • The generated column is created in RisingWave and will not be accessed through the external connector. Therefore, if the external upstream system has a schema, it does not need to include the generated column within the table’s schema in the external system.

A generated column in a table is slightly different from one in a source.

  • A generated column in a table is stored in the created table, and computed when it is inserted. This is equivalent to the STORED type of generated columns in PostgreSQL. If a table contains a generated column, the table cannot be updated or deleted in RisingWave.
  • A generated column in a source is not stored in the created source, and is computed when the source is queried. This is equivalent to the VIRTUAL type of generated columns in PostgreSQL.

To create a generated column as the processing time of a message, use the proctime() function, for example:

CREATE TABLE t1 (v1 int, proc_time timestamptz as proctime());

See also proctime().