--- title: "Materialize v0.30" date: 2022-11-02 released: true patch: 2 --- ## v0.30.0 * Fix a bug that could cause updates in [sinks](/sql/create-sink) to appear as two separate records, instead of consolidated into a single update record {{% gh 15748 %}}. Previously, updates for multiple keys that occurred at the same timestamp would either emit a deletion tombstone followed by a record with the new value (`ENVELOPE UPSERT`), or a `{"before": "OLDVALUE", "after": null}` record followed by a `{"before": null, "after": "NEWVALUE"}` record (`ENVELOPE DEBEZIUM`). * Improve error message for unsupported types in the [PostgreSQL source](/sql/create-source/postgres/), specifying the table and column containing an unsupported type: ```mzsql CREATE SOURCE pg_source FROM POSTGRES CONNECTION pg_connection (PUBLICATION 'mz_source') FOR ALL TABLES WITH (SIZE = '3xsmall'); ERROR: column "person.current_mood" uses unrecognized type DETAIL: type with OID 211538 is unknown HINT: You may be using an unsupported type in Materialize, such as an enum. Try excluding the table from the publication. ``` Fine-grained control for casting unsupported types into valid [Materialize types](/sql/types/) is a work in progress {{% gh 15716 %}}. * When using both signed and unsigned integers as inputs to a function, cast the inputs to a larger lossless type rather than [`double`](/sql/types/float). For example, when determining equality between [`integer`](/sql/types/integer) (32-bit signed integer) and [`uint4`](/sql/types/uint) (32-bit unsigned integer), both values are now cast to [`bigint`](/sql/types/integer) (64-bit signed integer). Previously both values would be cast to [`double`](/sql/types/double) (64-bit floating point number). * Improve the performance of DDL statements, especially when many DDL statements are run within the same 24 hour period. * Add an `xlarge` size for sources and sinks.