All Products
Search
Document Center

Hologres:Notable fixes

Last Updated:Jun 25, 2026

This document lists the issues resolved in each Hologres version, including issue descriptions and impact analysis. Use the error messages or issue descriptions to determine if your instance is affected. We recommend joining the Hologres real-time data warehouse user group to contact technical support for help upgrading your instance to the latest version. For more information, see How to get online support?.

Background

  • Bugs and fixes

    • A bug found in a specific version also exists in all previous versions, unless noted otherwise.

      For example, a bug in V1.3 is also present in V1.1 and V0.10.

    • A bug fixed in a specific version remains fixed in all subsequent versions.

      For example, a bug fixed in V1.1 remains fixed in V1.3 and later versions.

  • Bug severity

    • P0 (Critical): Upgrade immediately. These bugs can impact production services, such as query correctness and write success rate.

    • P1 (High): You should upgrade to prevent potential issues.

    • P2 (Medium): Upgrade as needed. You can resolve these intermittent bugs by rewriting a method or restarting the instance.

2026 defects

June 2026

Severity level

Description

Root cause

Affected version

Fixed version

Workaround

P0

Flushing data on a logical partitioned table with partial primary key updates may cause the instance to restart.

A defect in how logical partitioned tables handle primary key update scenarios during flush operations.

V3.1.1

V3.2.29, V3.1.43

Upgrade to a fixed version.

P0

Data writes fail with the error Partition count [65535] in memtable has exceed the limit [65535], followed by a worker restart.

A defect in the memtable partition count validation fails to include partitions from the current write batch, causing the worker to terminate unexpectedly.

V4.0.1

V4.1.21, V4.2.2, V4.0.37

May 2026

Severity level

Description

Root cause

Affected version

Fixed version

Workaround

P1

Running Rebuild on a table with Binlog enabled may cause the frontend node to hang, making the instance unavailable.

A defect in how Rebuild handles Binlog-enabled tables causes lock contention, which can hang the frontend node.

V4.1.1 to V4.1.20

V4.1.21

  • Upgrade to a fixed version.

  • Disable the GUC parameter set hg_experimental_rebuild_try_to_using_dynamic_table_mode=off before running Rebuild.

P2

Specifying multiple options in the connection string causes connection failures or incorrect parameter values. For example, setting options to -c statement_timeout=1000 -c search_path=public results in the error: Connect to FE failed, invalid value for parameter "statement_timeout": "1000-csearch_path=public"

The gateway module incorrectly strips whitespace when parsing the options field, causing multiple parameters to be merged into a single malformed value.

  • V2.0.18 to V2.0.35

  • V2.1.1 to V2.1.15

  • V2.0.36

  • V2.1.16

  • Upgrade to a fixed version.

  • Avoid specifying more than one option in the connection options string.

April 2026

Severity level

Description

Root cause

Affected version

Fixed version

Workaround

P2

When you use Data Masking V2 to query a VIEW that contains a masked table, you may incorrectly receive a permission denied for schema xxx or permission denied for table xxx error message.

The data masking feature incorrectly handles permissions.

  • V4.0.1 to V4.0.27

  • V4.1.1 to V4.1.12

  • V4.0.28

  • V4.1.13

Upgrade to a fixed version.

P1

When you execute a DML statement on a table that has a global secondary index (Global Index), an error is reported if the execution plan uses the Shard Prune operator: Transaction xxxxxxxxxxxxx has no snapshot of table xxxxx index 1.

The global secondary index feature does not yet support the Shard Prune operator.

V4.0.1

To be fixed

  • To resolve a query error, disable the GUC parameter hg_experimental_enable_shard_pruning.

  • Upgrade to the fixed version when it is released.

March 2026

Severity

Description

Root cause

Affected versions

Fixed versions

Workaround

P1

Using the phrase search mode of a full-text inverted index can produce incorrect search results if the slop parameter exceeds 255.

The matching logic for full-text inverted indexes is flawed when the slop value is greater than 255.

V4.0.1

V4.1.9

  • Upgrade to the latest version.

  • Avoid setting the slop parameter to a value greater than 255.

P2

A dynamic table refresh fails in incremental refresh mode if a Volatile function precedes an aggregate function and is not in the last column. The error is:

ERROR: Feature not supported: Distribution key must be contained by output columns, residual key list:[3, ]

The distribution key list is passed to the inner query, but it corresponds to the final output columns and cannot be mapped to the columns in the inner query.

V3.1

  • V4.1.8

  • V4.0.24

  • Use full mode, or place the Volatile function after the distribution key.

  • Upgrade to the latest version.

P2

When loading a table group into a virtual warehouse, the FE (Frontend) might not retrieve complete shard location information from the SE (Storage Engine), causing FixedFE write operations to fail for approximately 1 second.

In the function DDLReadService::DoGetTableGroupShards, break was used instead of continue when ShardInfos was empty, which caused incomplete data retrieval.

V1.1

  • V4.1.7

  • V4.0.24

  • Upgrade to the latest version.

P2

Batching an array column with a variable-length data type that exceeds 64 MB reports the following error: Copy overflow with offset xx, length xx, and array length xx.

A mutable array reserves space for only one row, but the appended array contains more than one row. When a text column exceeds 64 MB, the builder size is reserved for only one row without considering the minimum required size.

V4.0

  • V4.1.6

  • V4.0.21

  • Workaround: Run alter database xxx set hg_experimental_enable_batch_accumulator_v2=off;.

  • Upgrade to the latest version.

P2

When a user runs an SQL statement, the Alibaba Cloud account name is not automatically converted to an ID, for example, in GRANT USAGE ON SCHEMA public TO "ALIYUN$a".

is_initdb is incorrectly treated as true because extern bool is_initdb; is not declared.

  • V2.2

  • V3.0

  • V3.1

  • V3.2

  • V4.0

V3.0.53

  • Use account IDs instead of account names to perform operations.

  • Upgrade to the latest version.

P2

During batch copy processing, full shared memory can cause an ERROR: Parse data from copy encountered internal error or a coredump. The stack trace contains holo_copy or CopyReadLineText.

In batch copy mode, client data is batched by row count and written to shared memory. If a single row is large (approximately 600 MB per batch), concurrent writes from multiple connections can exhaust the shared memory. This can cause subsequent writes to fail or the process to crash because the read-side reads invalid values due to an overflow.

V1.1

  • V4.1.5

  • V4.0.21

  • V3.2.31

  • Workaround: Use streaming copy writes or decrease the value of the hg_experimental_query_batch_size parameter (default: 8192). For example, alter user xx set hg_experimental_query_batch_size = 512;.

  • Upgrade to the latest version.

P2

When reading array columns from Parquet files, an error occurs due to page index skipping. This issue may be triggered when the page index is enabled (default), an SQL query reads array columns, and a predicate pushdown to the Parquet reader filters any page of any column.

A compatibility issue exists between the page index skipping logic and array column reading. When predicate pushdown causes a page to be skipped, the read state of the array column is not correctly synchronized.

V3.1

  • V4.1.5

  • V4.0.19

  • V3.2.29

  • V3.1.43

  • Workaround: Disable the page index: set hg_experimental_enable_external_parquet_use_page_index = off;.

  • Upgrade to the latest version.

P2

Fixed an issue in Fixed plan mode where an INSERT ON CONFLICT statement produced an incorrect result if the WHERE clause was a constant. For example, when you executed insert into a values(0,1) on conflict(id) do update set id = excluded.id, name = excluded.name where 1 = 0;, no rows were written even if the ID did not conflict.

When the WHERE condition is a constant expression, the condition is not rewritten correctly, which prevents data that meets the condition from being written.

V4.0

  • V4.1.6

  • V4.0.24

  • Use the INSERT OR IGNORE syntax and avoid using constant conditions in ON CONFLICT expressions.

  • Upgrade to the latest version.

P2

The Parquet reader cannot process empty row groups. An error is reported when reading a row group that contains 0 rows. In Hologres V3.1 and later, this may cause a coredump, and the stack trace contains hologram::spi::parquet::RowRange.

The reader assumes that a row group contains data and is not empty. When processing an empty row group, the end-of-file (EOF) marker returned by the data page parser is ignored, which incorrectly triggers the error handling logic.

V3.0

  • V4.1.4

  • V4.0.19

  • V3.2.29

  • Workaround: Execute the query using hiveqe and set the GUC parameter to set hg_experimental_force_access_dlf_paimon_via_hiveqe = on; or set hg_experimental_force_access_dlf_iceberg_via_hiveqe = on; or hg_experimental_enable_access_dlf_via_fse = off;.

  • Upgrade to the latest version.

P0

Submitting an empty file during a bulkload operation causes the flush operation to fail. When a file with a size of 0 is submitted, the subsequent flush operation fails because it cannot open the file to read its metadata.

When a bulkload operation triggers a deletion compaction, all rows in the selected file are marked for deletion, which generates an empty file.

V3.1

  • V4.1.2

  • V4.0.18

  • V3.2.29

  • V3.1.43

  • Workaround: Set the GUC parameter and re-import the table: set hg_serverless_computing_run_compaction_before_commit_bulk_load = off;.

  • Upgrade to the latest version.

P2

A write operation fails for a Fixed plan if the global secondary index contains a boolean type. An error is reported when you create a global index and insert data: ERROR: XX000: internal error: unexpected error, failed to write, detail: Unsupported type in fixed dispatcher.

The fixed dispatcher does not support writing Boolean values to a global secondary index.

V4.0.0

  • V4.0.16

  • V4.1.2

  • Upgrade to the latest version.

P2

A Holo FDW cross-instance query fails. After you upgrade to version 4.0, the following error is reported when you query a foreign table: Fetch table group shards failed on meta proxy:Loading cached shard location value for table group[...] failed.

The FDW fails to load the cached shard location value.

V4.0.6

  • V4.0.15

  • V4.1.1

  • Upgrade to the latest version.

P2

Writing data from a data-masked table to a destination table with an auto-incrementing column causes unexpected behavior. In Hologres V4.0 and earlier, this operation may cause a coredump or abnormal error behavior.

The code assumes a one-to-one mapping between parsetree->targetList and rte_insert->insertedCols. This assumption is invalid when the destination table contains an auto-incrementing column because parsetree->targetList includes both the auto-incrementing and user-specified columns, while rte_insert->insertedCols includes only the user-specified columns.

V3.1

  • V3.2.26

  • V4.0.14

  • V3.1.42

  • Avoid using auto-incrementing columns.

  • Upgrade to the latest version.

P2

The Array Ref interface is not thread-safe and can cause a coredump. Starting from Hologres V2.2, in the shuffle logic for worker-level shuffle and QE v2, multi-threaded access to array->type can cause a coredump, and the type field of the array becomes an invalid value.

Although the ArrayRef type-retrieval interface is marked as const, the mutable keyword allows the type_ member variable to be modified. Concurrent access to type by multiple threads can corrupt the control block of type_, which leads to thread-safety issues.

V3.1

  • V4.1.6

  • V4.0.21

  • V3.2.31

  • V3.1.45

  • Temporary workaround: Disable worker-level shuffle and QE v2.set hg_experimental_enable_worker_level_connection = off; set hg_experimental_enable_qe_v2 = off;.

  • Upgrade to the latest version.

P2

An error occurs when you add a column to an existing Dynamic table by using the alter definition statement. If the base table is a physical partitioned table and the Dynamic Table (DT) is a logical partitioned table, executing the alter definition statement on the DT reports one of the following errors: ERROR: New definition is not supported in incremental mode: Multiple partitions of table XXX is selected or ERROR: New definition is not supported in incremental mode: No partitions of table XXX is selected.

During the creation process, a GUC parameter was set to ignore the query optimizer's partition number check, but this logic was not synchronized in the ALTER DEFINITION process.

V3.1

  • V3.1.40

  • V3.2.24

  • V4.0.12

  • V4.0.13

  • Workaround: Set the GUC parameter by executing set hg_experimental_check_selected_partition_table_number_for_dynamic_table = off;, and then execute alter definition.

  • Upgrade to the latest version.

P2

A duplicate primary key error is reported when you create an External Dynamic table. This occurs when the select query for the External DT joins or unions multiple identical tables. As a result, the generated base table list contains duplicates, which causes an error when data is inserted into the system table: ERROR: duplicate key value violates unique constraint "pg_holo_external_dynamic_table_dependencies_name_index".

This issue affects both dynamic tables and external dynamic tables. The system table for a dynamic table does not have a primary key, so inserting duplicate records does not cause an error. However, the system table for an external dynamic table has a primary key constraint, which prohibits duplicate records.

V4.0

V4.0.13

  • Upgrade to the latest version.

P2

An aggregate query on data of the char(n) type fails. After you enable AQE, executing the select col1, max(col2) from t1 group by col1 statement returns the following error: hos_exception: Internal error: HGERR_code XX000 ExecuteQuery failed, last errmsg: syntax error at or near "4294967291".

In ORCA, the type_modifier field was not inferred for aggregate results of the char type. This caused the type_modifier of the aggregate result to be set to -5 (which is 4294967291 as an unsigned integer). When AQE was enabled, it attempted to create a char(4294967291) field, which exceeded the length limit and caused an error.

V3.1

  • V3.1.39

  • V3.2.24

  • V4.0.12

  • V4.0.13

  • Workaround: Disable AQE: alter database xxx set hg_experimental_enable_adaptive_execution = off;.

  • Upgrade to the latest version.

P2

Snapshot SQL execution fails when a view contains a subquery without an alias. If a view's SELECT statement uses the subquery alias optional feature to create a subquery without an alias, executing the snapshot SQL generated by hg_dump_script returns an error: unnamed_subquery does not exist.

When PostgreSQL infers the view definition SQL from the view rule, it does not enforce an alias for the subquery. If a user's view has a subquery without an alias, the inferred view definition SQL also lacks an alias, but the target list specifies one, which causes an SQL parsing failure.

V4.0

  • V4.1.6

  • V4.0.12

  • Recreate such views by using CREATE OR REPLACE and provide an alias for each subquery.

  • Upgrade to the latest version.

P1

Duplicate records appear after grouping a Paimon Deletion Vector (DV) table by primary key. This occurs when a Parquet file contains a page with a FIXED_LEN_BYTE_ARRAY physical format, a decimal logical format, and plain encoding. If a record batch being read from that column crosses a page boundary, the data after the boundary within that batch is incorrectly placed at the start of the record batch.

The Parquet decoder did not apply an offset when placing data, which caused incorrect data positioning when a record batch crossed a page boundary.

V3.1.0

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • V4.0.12

  • Workaround: Execute select hg_admin_command('set_global_flag', 'enable_create_decimal_array_v2 = true');.

  • Upgrade to the latest version.

P2

After MaxCompute table queries are switched to the Common Table access path, Auto Analyze cannot obtain the latest last modified time for the table, and Out of Memory (OOM) errors can occur. After an upgrade to Hologres V3.0.51, OOM errors may persist when querying foreign tables by using the Common Table path. In a three-level model for a MaxCompute table, the schema name in the response from the Common Table access path becomes default instead of Hologres' project name. This causes Auto Analyze to fail in the batch retrieval of the foreign table's last modified timestamp, and no change information is collected.

The Common Table access path and holo_native are not aligned in their handling of the three-level model. For the fetcher->GetTables interface in a three-level model, holo_native returns the project_name as the schema_name, but the Common Table access path returns default as the schema_name. This causes a data backfill failure.

V3.0

  • V3.0.52

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • Manually run the ANALYZE command.

  • Upgrade to the latest version.

P2

When Hologres queries MC data by using CommonTable, a slow memory leak occurs in the oct_get_partition_names interface. The issue occurs after an upgrade from Hologres V3.1.22 to V3.1.30, causing a continuous and slow increase in memory usage over the long term. It is triggered by high-frequency queries on MC partitioned tables when CommonTable is enabled.

The oct_get_partition_names interface has a slow memory leak, causing a continuous increase in memory usage over time.

V3.0

  • V3.0.51

  • V3.1.36

  • V3.2.18

  • V4.0.7

  • The memory leak is slow. When holo_worker memory is high, you can restart the pods with high memory to recover. If there are many pods, you can restart the instance.

  • Upgrade to the latest version.

P1

On the probe side of a hash join, a runtime filter generated from the first child of a UNION ALL is pushed down to the second child, causing data loss in the query result.

During the mapping and pushdown process to the second child of the UNION ALL operation, the runtime filter from the first child was incorrectly merged, leading to an erroneous pushdown.

V3.1

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • V4.0.12

  • Workaround: Set the GUC parameter: alter database set hg_experimental_enable_runtime_filter_push_thru_union_all=off;.

  • Upgrade to the latest version.

P2

Dynamic tables that have been renamed or whose schemas have been altered cannot be automatically refreshed after an upgrade to Hologres V4.0.7 or a later version. The following error message is reported: ExecuteQuery failed, last errmsg: Can not find dynamic table properties of XXX or relation "XXX" does not exist.

A dynamic table needs to periodically fetch the latest properties from the FE (Frontend) in the driver. When the code was moved from the table driver to the driver master, the logic for synchronizing the latest table and schema names was omitted. This causes refreshes to fail after an upgrade because they use the initial creation name.

V4.0.7

  • V4.0.10

  • V4.0.13

  • Upgrade to the latest version.

P2

A CREATE TABLE AS SELECT (CTAS) statement shows degraded performance because of certain optimization steps during the createstmt phase of query optimization.

Some unnecessary optimization steps in the query optimization phase for CTAS statements negatively impacted performance.

V4.0

  • V4.0.10

  • V4.0.13

  • Upgrade to the latest version.

P1

Using the ANY_VALUE aggregate function on an incrementally refreshed dynamic table produces incorrect results. Multiple values are returned when querying the dynamic table, even though the base table field has only one value.

In FinalizeStateRows, the result_array was incorrectly generated inside a loop. This bug was not cherry-picked to the V3.2 release branch.

V3.2

V3.2.24

  • Workaround: Replace the function with a MIN or MAX function, such as select id, sum(col1), min(col2) from t1 group by id.

  • Upgrade to the latest version.

P2

The number of out of memory (OOM) errors increases when you query foreign tables after switching from the normal link to the Common Table link. The following error is reported: ERROR: internal error: common table memory pool out of memory.

Permission changes in the Common Table access path during Auto Analyze collection prevent the system from obtaining the table's last modified time. This prevents Auto Analyze from being triggered, leading to outdated statistics and OOM errors.

  • V3.0.42

  • V3.1

  • V3.2

  • V4.0

  • V4.0.9

  • V3.1.38

  • V3.2.21

  • V3.0.51

  • V3.2.24

  • Manually run the ANALYZE command.

  • Upgrade to the latest version.

P2

An error occurs in serverless mode when refreshing a dynamic table while multiple row-level transactions are open.

A patch moved the check for a non-existent table group to the FE (Frontend) but did not account for the serverless scenario. This issue is triggered when a serverless DML statement that cannot be auto-routed is run on a follower virtual warehouse.

V4.0

  • V4.0.9

  • V4.0.13

  • Use DML auto-routing by granting permissions to the leader virtual warehouse, or connect to the leader virtual warehouse to run SQL statements or create the dynamic table.

  • Upgrade to the latest version.

P2

A query results in an Out of Memory (OOM) error.

The execution class (EC) priority of the shuffle operation was lowered, preventing it from getting enough time slices when CPU usage was high. This slowed data retrieval on the build side, delayed runtime filter construction, and caused the probe side to read excessive data, reducing filtering efficiency.

Versions later than V4.0.x

  • V4.0.10

  • V4.0.13

  • Workaround: Set the following GUC parameters: hg_experimental_enable_qe_v2 = on, hg_experimental_runtime_filter_wait_time_ms = 10000, and hg_experimental_wait_for_all_runtime_filters = on.

  • Upgrade to the latest version.

P1

The client_addr field is empty in some login audit logs.

When the gateway reports login audit logs, it makes an additional call to getpeername to retrieve the client IP address. If the client connection has already been abnormally disconnected, the IP address cannot be obtained.

All versions that support login audit logs

V4.0.13

  • Upgrade to the latest version.

P2

An error is reported when you use preparestmt to execute a query that contains a clustering key: ERROR: XX000: Dispatch query failed: internal error: DataType::STRING column range conjuncts should use string literal or parameter ref.

mask_md5 is a clustering key. During the prepared statement phase, the expression mask_md5 in (md5($1),md5($2)) cannot be constant-folded. This causes the extracted clustering filter to contain the md5 function, and the backend reports an error because it cannot parse this filter.

V1.1

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • V3.2.24

  • Workaround: Do not use preparestmt or change mask_md5 in (md5($1),md5($2)) to mask_md5 = md5($1) or mask_md5 = md5($2).

  • Upgrade to the latest version.

P2

In rare cases, a coredump occurs when a query with a LIMIT clause is run or manually canceled early, which causes the query to fail and the worker to restart.

The SplitFactory::Close function released resources but did not use its own ExecutionContext. This caused resources to be released before other functions had finished, which triggered a coredump.

V3.2.4

  • V4.0.7

  • V3.2.19

  • V3.2.24

  • V4.0.13

  • To work around this, set the GUC parameter: alter role all set hg_experimental_enable_qe_v2 = off;.

  • Upgrade to the latest version.

P2

After a TableGroup is unloaded, Holoweb login fails and the metadata warehouse reports the error ERROR: 42704: Table group[bizp.bizp_tg_default] is not found in warehouse bdmp_api_warehoue. Gateway metrics show a high number of new connection requests and high latency, and a large number of new fixed fe connections are created in a short period. When consuming the binlog at startup, lock acquisition takes a long time, and high concurrency can cause insert operations to get stuck.

When an unload occurs, new requests such as binlog or fixed plan requests on the old virtual warehouse retry in bhclient for 27.5 seconds. Binlog consumption on the FixedFE synchronously calls this method when connecting to the EC. When a retry occurs, it blocks the connection to the EC, which causes new FixedFE connection creation to get stuck and leads to a connection buildup.

V3.2

V4.0.8

  • Stop the binlog consumption task and modify the Flink job to use the correct virtual warehouse. Alternatively, log on to HoloWeb and load the unloaded table group to the target virtual warehouse. If HoloWeb is inaccessible, contact an FE (Frontend) developer to restart the gateway from the backend.

  • Upgrade to the latest version.

P2

In Hologres V3.1, after you enable auto refresh for a Dynamic Table, the container memory continuously increases when observed over a 7-day period. The FE memory increases while the holo worker memory remains stable. The memory also continuously increases when you repeatedly execute hg_generate_query_options_for_dynamic_table.

The UDF hg_generate_query_options_for_dynamic_table has a memory leak. The UDF instantiates a HoloQmDispatcher object. Although the object is managed by a shared_ptr, the DispatcherManager stores it in a map that is keyed by query_id. The query_id created by the code is a separate ID and is not the query_id of the query that the UDF executes. When a query is complete, RemoveDispatcher(query_id) should be called to remove the dispatcher. However, this step is missing in the code. Because the lifecycle of the DispatcherManager is bound to the connection (conn) process, the dispatcher objects accumulate over time.

V3.1.0

  • V4.0.0

  • V3.1.26

  • V3.2.8

  • Workaround: Find and terminate long-lived connections in pg_stat_activity, or register a cron job to automatically clean up connections that are older than 1 hour: SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE length(query) > 0 AND pid != pg_backend_pid() AND backend_type = 'client backend' AND state = 'idle' AND application_name = 'DynamicTableTableDriver' AND current_timestamp - backend_start > '1 hour';

  • Upgrade to the latest version.

P2

In an instance, two workers have higher memory usage than other workers, with no shard skew. Monitoring shows a significant difference in FE (Frontend) memory. Queries from the time memory started increasing reveal a long-running connection that has run a large number of DDL statements (query_count > 1000).

The DDL execution process has a memory leak. The memory for a QueryDesc object is released when the query-level MemoryContext is released at the end of the query. However, UtilityStmt (broadly DDL) allocates memory in a long-lived MemoryContext. This memory is not released when the query-level MemoryContext is released, which causes a memory leak.

All versions

  • V3.1.22

  • V3.2.5

  • V3.2.24

  • Workaround: Close the long-lived connections that have memory leaks to free up memory. You can use the following SQL query to identify these connections:SELECT pid, session_id, count(*) as query_count, max(query_start) FROM meta_warehouse.query_info WHERE query_start > now() - '1 hour'::interval AND command_tag NOT IN ('INSERT','SELECT','DELETE','UPDATE') GROUP BY 1,2 ORDER BY 3 DESC LIMIT 20;

  • Upgrade to the latest version.

February 2026

Severity

Description

Cause

Affected versions

Fixed versions

Workaround

P1

An instance may briefly restart when you create a table with a name that contains spaces, special characters, and mixed-case letters.

The instance coredumps because it reads an incorrect state when it retrieves table properties from a system table.

  • V4.1.6

  • V4.0.23

  • V4.1.7

  • V4.0.24

  • Upgrade to the latest version.

P2

An error occurs when ai_gen is used with to_file.

function ai_gen(text, text, file, bytea) does not exist

A type conversion error causes the ai_gen function to fail when used with to_file.

  • V4.1.5

  • V4.0.21

  • V4.1.6

  • V4.0.22

  • Upgrade to the latest version.

P1

If a virtual warehouse consumes a source table's binlog in lightweight connection mode without loading the Table Group of the source table, the instance may be unable to create new connections. This mode is active if the Flink source table parameter connection.fixed.enabled is enabled, or is enabled by default on certain instance versions.

During initialization in lightweight connection mode, requests retry automatically because the current virtual warehouse has not loaded the Table Group. During these retries, the error-handling path incorrectly holds a global lock, which blocks new connection requests.

  • V3.1.13

  • V3.2.10

  • V4.0.0

  • V4.0.8

  • Upgrade to the latest version.

  • If the instance has sufficient connections, set the connection.fixed.enabled parameter on the source table to false.

P1

An incremental dynamic table that contains a stream-stream join may fail during its first refresh or when you run REFRESH OVERWRITE.

ERROR: hos_exception: Internal error: status { code: OPERATION_INVALID_ARGUMENT message: "duplicate key value violates unique constraint...

If the table definition includes an aggregation based on the stream-stream join result, the aggregation result might be incorrect.

The first incremental refresh may occasionally include recently deleted data in its calculation, leading to errors or incorrect results.

  • V3.2.5

  • V4.0.1

  • V4.1.1

  • V4.0.21

  • V4.1.6

  • Upgrade to the latest version.

P2

When the array_to_string function is called with two arguments, NULL values in the input data are included in the calculation. This behavior is inconsistent with PostgreSQL, which excludes NULL values.

Note

For three-argument calls, NULL values are also included in the calculation, which is consistent with PostgreSQL behavior.

A logic defect in the HQE engine affects two-argument calls to the array_to_string function.

  • V3.0.1

  • V3.1.1

  • V3.2.1

  • V3.0.46

  • V3.1.25

  • V3.2.24

  • Upgrade to the latest version.

January 2026

Severity

Description

Cause

Affected versions

Fixed versions

Workaround

P2

A query fails if it uses a JOIN and is processed by the PQE execution engine.

ERROR: XX000: internal error: unmatched data row schema number

A mismatch between the output columns of the JOIN operator and the input columns for the PQE execution engine causes the error.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.33

  • V3.2.24

  • V4.0.13

  • Rewrite the SQL to avoid using the PQE execution engine.

  • Upgrade to the latest version.

P2

Using the BETWEEN operator in a query processed by the PQE execution engine causes an error.

ERROR: 0A000: ORCA failed to produce a plan : Operator BetweenAnd not supported

The PQE execution engine does not support the BETWEEN operator.

  • V3.2.0

  • V4.0.0

  • V3.2.24

  • V4.0.13

Upgrade to the latest version.

P1

Filtering on a timestamp column used as a segment or cluster key fails to filter the result set.

An issue in the storage engine's segment key extraction logic causes incorrect filtering.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.38

  • V3.2.24

  • V4.0.13

Upgrade to the latest version.

P1

After an upgrade to V4.0, memory usage continuously increases and does not stabilize or decrease, even when no queries are active.

A memory leak occurs in the V4.0 result cache path when processing dictionary arrays.

  • V4.0.0

  • V4.0.10

  • To work around this issue, disable the feature flag:

     select hg_admin_command('set_global_flag', 'enable_dict_array=false');
  • Upgrade to the latest version.

P2

When a CTE is reused, the system cannot generate a query plan and returns an error.

ORCA failed to produce a plan : No plan has been computed for required properties

The query optimizer (QO) does not correctly update the CTE count, which causes the error.

  • V3.2.0

  • V4.0.0

  • V3.2.24

  • V4.0.7

  • As a workaround, change the CTE strategy to inlining:

    ALTER DATABASE <database_name> SET hg_cte_strategy = 'inlining';
  • Upgrade to the latest version.

P2

Accessing array elements using range notation, such as array_column[1:1], causes an error.

A bug in the query optimizer's (QO) handling of array elements causes this error.

  • V3.0.0

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.39

  • V3.2.24

  • V4.0.13

Upgrade to the latest version.

P1

Data may be missing from PQE results if the shard count exceeds the bucket count and the following conditions are met. This occurs when PQE output bypasses the shuffle phase and is directly used in JOIN or UNION ALL operations with the scan results from another columnar table in the same table group.

  • A columnar table uses a primary key index, which triggers a point seek.

  • Data is processed directly by PQE.

When a columnar table uses a primary key index, the plan generated by the query optimizer (QO) does not include a Gather operator. If the bucket count is not equal to the shard count and a bucket contains multiple shards, data loss may occur because PQE incorrectly calculates the shard_count to bucket_count ratio.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.39

  • V3.2.24

  • V4.0.10

Upgrade to the latest version.

P2

  • Rebuilding a table with a name containing uppercase letters (but no other special characters) fails. The progress view shows an error indicating that the view could not be found.

  • Rebuilding a table with column names containing uppercase letters (but no other special characters) fails. The progress view reports a missing column in the temporary table.

The rebuild process in older versions did not correctly handle case-sensitive identifiers.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.40

  • V3.2.25

  • V4.0.13

Upgrade to the latest version.

P2

A subquery that contains a CASE WHEN expression causes the following error:

ERROR: column "xxx" does not exist

A query optimizer bug prevents it from generating a valid plan for this scenario.

  • V3.0.0

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V4.1.0

  • V3.0.53

  • V3.1.41

  • V3.2.25

  • V4.0.14

  • To work around this issue, disable the feature flag:

    ALTER DATABASE <database_name> SET hg_experimental_reuse_switch_case_expression = 'off';
  • Upgrade to the latest version.

P1

When a Flink job consumes Hologres binlog, if its source table is defined with a subset of columns from the physical table, the job may ingest unexpected NULL values.

The Hologres connector for Flink does not correctly handle binlog consumption with projected columns.

  • Flink VVR 11.3 or 11.4 with Hologres V4.0.1 or later.

  • Hotfixes for Flink VVR 11.3 and 11.4 were released on January 9, 2026.

  • After the fix is released, restart the Flink job.

  • Before the fix is available, add the following configuration to the WITH clause of the Flink source table and restart the job: source.binlog.project-columns.enabled' = 'false'.

P1

Completed queries may not be cleaned up correctly, leaving residual transactions that hold table locks.

A defect in the garbage collection (GC) logic for some completed queries leads to residual query identifiers (query_id).

  • V2.2.0 and earlier

  • V3.0.0

  • V2.2.32

  • V3.0.12

  • Upgrade to the latest version.

  • Manually clean up residual queries by running the following SQL command:

    SELECT pg_terminate_backend(pid) FROM hg_stat_activity WHERE query_id = <query_id>;

2025 defects

December 2025

Severity

Description

Cause

Affected versions

Fixed versions

Workaround

P0

Querying a DLF Paimon Postpone table reads uncompacted committed data, which can cause duplicate primary keys.

The behavior of the Paimon SnapshotReader class changed after the Hologres upgrade to V3.2.12:

  • Older Paimon SDK versions: The SnapshotReader automatically added the onlyReadRealBuckets option for Postpone tables. This option limited reads to final, compacted data.

  • Newer Paimon SDK versions removed this automatic logic. You must now manually configure this option for the SnapshotReader to read only the final data.

  • V3.2.12

  • V4.0.0

  • V3.2.24

  • V4.0.11

  • Upgrade to the latest version.

P1

When using a DLF foreign table with bucket_num=-2 for a Paimon table, an incorrect join plan for multi-table joins can produce inaccurate results.

When the bucket_num of a Paimon table is set to -2 in scenarios that involve multi-table JOINs, an incorrect JOIN plan is generated, which prevents data from being joined effectively and results in inaccurate query results.

  • V3.2.0

  • V4.0.0

  • V3.2.21

  • V4.0.8

  • As a temporary workaround, disable the feature with the following SQL command:

    ALTER DATABASE <database_name> set hg_experimental_use_shard_info_in_hashed_dist_spec=off;  
  • Upgrade to the latest version.

P1

Using a CTE expression produces inconsistent results between split and combined execution.

When a CTE expression is used, the system fails to report an intermediate result failure to the FE, which leads to an incorrect final result.

  • V3.2.0

  • V4.0.0

  • V3.2.17

  • V4.0.6

  • Upgrade to the latest version.

P1

Even when a user has the required permissions, queries on hologres.hg_query_log and hologres.hg_table_info return empty results.

The system fails to report data for hologres.hg_query_log and hologres.hg_table_info.

  • V2.0.39

  • V2.2.16

  • V3.0.0

  • V2.0.47

  • V2.1.44

  • V2.2.24

  • V3.0.2

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • Upgrade to the latest version.

P0

During an incremental refresh of a dynamic table with a multi-stream join, if only one stream contains data and that data includes retractions, the refresh produces incorrect results compared to a direct query.

During an incremental refresh of a dynamic table, data retraction from a single stream is not handled correctly. Consequently, the system does not remove rows that should be deleted from the result table, which makes the result table incorrect.

  • V4.0.1

  • V4.0.9

  • First, modify the table data. Then, use refresh overwrite to correct the erroneous data. Run the following two SQL commands:

    alter table xxx set (refresh_guc_hg_experimental_incremental_agg_insert_bulkload_batch_size = 1);
    refresh overwrite table xxx with (refresh_mode = 'incremental');
  • Upgrade to the latest version.

P1

After an upgrade to V4.0, worker OOM errors may occur. The error messages are similar to the following:

  1. Error: ERROR: XX000: ERPC_ERROR_CONNECTION_CLOSED

  2. Error: ERROR: Dispatch query failed: Connect to xxx.xxx.xxx:xxx failed

To cache more data in memory, V4.0 optimizes the memory structure. However, the new structure has a defect when handling the Decimal type. When a table that contains Decimal columns participates in a hash join, the instance may generate a core dump.

  • V4.0.0

V4.0.10

  • As a temporary workaround, disable query memory optimization by using the following SQL command:

    select hg_admin_command('set_global_flag', 'enable_selection_vector=false');
  • Upgrade to the latest version.

P1

Queries on a non-empty MaxCompute Append Delta Table incorrectly return an empty result set.

A bug in the split cache causes queries to return an empty result.

  • V4.0.0

V4.0.9

  • As a temporary workaround, disable the split cache using the command below.

ALTER DATABASE <database_name> set hg_experimental_enable_maxcompute_sdk_splits_cache=off;
  • Upgrade to the latest version.

P0

In V4.0, when you use a logical partitioned table that has a primary key and a clustering key, duplicate primary key values can occur.

To improve write performance for logical partitioned tables, V4.0 supports multi-partition flush. However, a bug in the cluster index processing logic during this operation can corrupt the cluster index in AliORC files (data files for internal columnar tables) stored on Pangu. A corrupted cluster index can make existing data unreadable. Consequently, during an update, the system fails to find the old data and inserts a new row, creating a duplicate.

  • V4.0.0

V4.0.9

  • Upgrade to the latest version. After the upgrade, the system adds logic to detect corrupted files. If a corrupted file is scanned, the system reports an error: clustered_index size [x] incorrect. If this error occurs, run a full compaction on the affected table to repair it. For more information, see Partitioned Table FAQ.

P1

After an upgrade to V4.0, worker OOM errors may occur. The error messages are similar to the following:Error 1: ERROR: XX000: ERPC_ERROR_CONNECTION_CLOSED

Error 2: ERROR: Dispatch query failed: Connect to xxx.xxx.xxx:xxx failed

To cache more data in memory, V4.0 optimizes the memory structure. However, the new structure miscalculates the data size, underestimating the memory required and causing a worker OOM.

  • V4.0.0

V4.0.7

  • As a temporary workaround, disable the result cache using the command below.

ALTER DATABASE <database_name> set hg_experimental_enable_result_cache=off;
  • Upgrade to the latest version.

November 2025

Level

Description

Cause

Affected versions

Fixed versions

Workaround

P1

In Flink real-time write scenarios, dropping a user and then recreating one with the same name and permissions may result in permission errors for the new user, even on a new connection.

An issue with the user permission cache update strategy in the FixedFE component.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.38

  • V3.2.21

  • V4.0.9

  • Upgrade to the latest version.

P1

When using stream mode for an incremental refresh of a Dynamic Table, performing INSERT, UPDATE, or DELETE operations on the source table immediately followed by TRUNCATE or INSERT OVERWRITE can cause subsequent refreshes to contain incorrect data.

If TRUNCATE or INSERT OVERWRITE immediately follows DML operations (INSERT, UPDATE, or DELETE) on the source table during an incremental refresh, the Dynamic Table may process duplicate DELETE messages for the same primary key, leading to incorrect data.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Upgrade to the latest version.

P2

Running SELECT hg_rebalance_instance() to rebalance a general-purpose instance causes a shard group not found error.

An incorrect default parameter is passed when rebalancing a general-purpose instance.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Upgrade to the latest version.

P2

During a scaling operation, a ShardPermissionDenied error may rarely occur on a table group's primary and secondary virtual warehouses, causing brief write failures.

The system is designed to convert a ShardPermissionDenied error into a retryable kShardHotMigrationInProgress error during scaling. However, this conversion fails, and the original error is returned to the client.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Upgrade to the latest version.

P2

After switching to the Common Table access path for MaxCompute, refreshing a Dynamic Table that uses a MaxCompute external table fails with the following error:

MaxCompute csdk open reader failed: set_reader_filter, parser filter error: (Invalid: File is smaller than indicated metadata size) filter= (ARROW1)

The method for passing a query plan for a Dynamic Table differs from that of a regular OLAP query. During transmission, the binary data of the plan is corrupted, causing the filter to fail parsing.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.36

  • V3.2.17

  • V4.0.6

  • Disable the Common Table access path as a temporary workaround.

ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';
  • Upgrade to the latest version.

P2

When using the standard PostgreSQL authorization model, even after a user is granted Owner permission on a Dynamic Table, refreshing a history table or partition as the owner may still result in a Permission Denied error.

The identity used for the refresh is cached. After permissions change, subsequent refreshes incorrectly use the outdated cached identity, triggering the error.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • To be fixed

  • Upgrade to the latest version.

P2

Querying data in DLF with a range filter on a timestamp column causes the following error:

ERROR:  XX000: Dispatch query failed: Internal error: hos_exception: Internal error: status { code: SERVER_INTERNAL_ERROR message: "Call iterator Next() Failed: is_meta_mirror_iter: 1, error: hos_exception: [meta_util.cc:292 CompareSimpleValue] HGERR_code XX000 HGERR_msge internal error: value1 should has long literal HGERR_end" err_data { filename: "snapshot_api.cc" lineno: 1136 funcname: "GetSnapshotDataSetBatch" sqlerrcode: 2600 message: "internal error: Call iterator Next() Failed: is_meta_mirror_iter: 1, error: hos_exception: [meta_util.cc:292 CompareSimpleValue] HGERR_code XX000 HGERR_msge internal error: value1 should has long literal HGERR_end" context: "" } }

The system mishandles the literal type, incorrectly treating it as a long literal.

  • V3.2.0

  • V4.0.0

  • V3.2.17

  • V4.0.6

  • Disable the Bigmeta access path as a temporary workaround.

ALTER DATABASE <database_name> set hg_experimental_enable_big_meta=off;
  • Upgrade to the latest version.

P2

When inserting fewer than 10 rows with a DML statement into a table whose primary key contains a boolean column, the following error occurs:

ERROR:  XX000: internal error: hos_exception: [literal.cc:181 Init] HGERR_code XX000 HGERR_msge internal error: Unsupported output data type BOOL in type { id: LIST children { id: BOOL nullable: false field_name: "is_ciga" } } long_literal { array { values: 0 values: 0 values: 0 values: 0 values: 0 values: 0 values: 0 } }. HGERR_end

The query engine converts a boolean array to a uint8 array. When hybrid DML creates a row group filter, it does not account for this scenario. This causes a mismatch between the literal type (bool) and the actual value type (long) in the row group filter.

  • V3.1.0

  • V3.2.0

  • V3.1.25

  • V3.2.7

  • Disable hybrid DML as a temporary workaround.

ALTER DATABASE <database_name> set hg_experimental_enable_hybrid_dml = off;
  • Upgrade to the latest version.

P2

Using a remote UDF causes the following error:

 [Invoke function 'random_between' qualifier 'LATEST' compression 'None' failed: Fail to check http status: 403, {"RequestId":"xxxxx","Code":"SignatureNotMatch","Message":"The request signature we calculated does not match the signature you provided. Check your access key and signing method."} with request: Request {
  url: /2023-03-30/functions/random_between/invocations,
  method: POST,
  params: {qualifier: LATEST},
  headers: {Authorization: xxxxx}

The error is caused by a defect in the multi-threaded invocation handling logic.

  • V3.1.0

  • V3.2.0

  • V3.1.25

  • V3.2.8

  • Upgrade to the latest version.

P1

When using stream mode for an incremental refresh of a Dynamic Table, a refresh that immediately follows a source table compaction can result in out-of-order incremental data.

Out-of-order incremental events for the same key can cause incorrect results in the sink table.

  • V3.1.0

  • V3.2.0

  • V3.1.23

  • V3.2.6

  • Upgrade to the latest version.

P1

When you use the REBUILD command:

  • binlog disabled: If the binlog is disabled, rebuilding a physical partitioned table into a logical one incorrectly enables the binlog on the resulting table.

  • binlog enabled: If the binlog is enabled, rebuilding a physical partitioned table into a logical one fails to enable the binlog on the resulting table.

The binlog handling logic is incorrect during a rebuild partition to logical partition operation.

  • V3.1.1

  • V3.2.1

  • V4.0.1

To be fixed

P2

When you use create table as to read a DLF external table, the following error message is displayed:

check permission for dlf table failed: failed to check permission: DLF error,


The create table as statement causes a permission read error when reading a DLF V2.0 table.

  • V3.0.1-V3.0.49

  • V3.1.1-V3.1.34

  • V3.2.1-V3.2.16

  • V4.0.1-V4.0.4

  • V3.0.50

  • V3.1.35

  • V3.2.17

  • V4.0.6

  • Upgrade to the latest version and use the REBUILD command instead.

P2

If data masking is applied to the source table, the error message the insert table has not set security label is reported when you use a CREATE TABLE ... AS statement. An example SQL statement is as follows:

create table tb1(id int, data text);
insert into tb1 select i, i::text from generate_series(1, 10) i;
security label for hg_anon on column tb1.data is 'default_value';

set hg_anon_enable = t;
create table bk as select * from tb1;

The data masking settings are not passed to the create table as process, which causes an error.

  • V3.1.1-V3.1.32

  • V3.2.1-V3.2.12

  • V4.0.1-V4.0.2

  • V3.1.33

  • V3.2.13

  • V4.0.3

  • Upgrade to the latest version and use the REBUILD command instead.

P0

When you use higher-order array functions, if all elements in the result array are identical, the result may be incorrectly deduplicated to a single-element array. Examples:

create table tbl1(col1 text[]);
insert into tbl1 values(array['1', '1']);
select hg_array_map(lambda[x => '1' || '1'], col1) from tbl1; 
-- Returns {11}, but expected {11, 11}

create table tbl2(col1 jsonb);
insert into tbl2 values('{"a": "a", "b": "b", "c": null}');
select hg_array_map(lambda[x => col1 ->> x], array['c', 'd']) from tbl2; 
-- Returns {NULL}, but expected {NULL, NULL}

select hg_array_map(lambda[x => case when col1 ->> x is null then '' else col1 ->> x end], array['c', 'd']) from tbl2;
-- Returns {''}, but expected {'', ''}

select hg_array_map(lambda[x => case when col1 ->> x is null then '1' else col1 ->> x end], array['c', 'd']) from tbl2;
-- Returns {1}, but expected {1, 1}

A defect in the array calculation framework causes it to incorrectly handle arrays where all elements are identical.

  • V3.2.1-V3.2.16

  • V4.0.1-V4.0.5

  • V3.2.17

  • V4.0.6

  • Upgrade to the latest version.

October 2025

Level

Description

Cause

Affected and fixed versions

Workaround

P0

When using the Table Resharding feature in HoloWeb, if a task fails and is then canceled, the system does not correctly clean up the temporary table.
Manually running DROP TABLE on this temporary table then causes the frontend (FE) to become unresponsive.































































































































Defective cleanup function in HoloWeb.

Affected versions:

  • V2.0.24

Fixed versions:

  • V2.2.28

Upgrade to the latest version.

P2

The HG_MOVE_TABLE_TO_TABLE_GROUP (resharding) function fails if the target table name contains special characters or is a keyword. The function fails silently, leaving the table group unchanged.

The HG_MOVE_TABLE_TO_TABLE_GROUP function incorrectly handles character escaping.

Affected versions: All versions

Fixed versions: None. See the workaround.

Upgrade to V3.1 or later and use the Rebuild feature.

P2

In pay-as-you-go bills for Hologres Serverless Computing resources, the instance ID field is incorrectly displayed as <instance_id>_<uid>_<region_id>. The expected display is <instance_id>.

Underlying configuration issue.

This issue is not version-specific and affects bills generated from 2025-09-09 16:00:00 to 2025-10-14 16:00:00.

The issue was resolved. Bills generated after 2025-10-14 16:00:00 are correct.

Process bills from the affected time range separately.

September 2025

Level

Description

Cause

Affected and fixed versions

Workaround

P0

During a shard rebalance operation (such as scaling or restarting), if multiple requests complete simultaneously, background processes may fail. This can lead to read and write failures on the instance.

The backend incorrectly processes multiple requests that complete at the same time.

Affected version: V3.0.9.

Fixed versions: V3.0.14 and later.

Upgrade to the latest version.

P0

When you import data from a Hologres foreign table to an internal table, the adaptive import feature can cause data loss if all the following conditions are met:

  • Data is imported using an INSERT INTO ... SELECT ... statement.

  • The system automatically adjusts the import speed due to high system resource pressure. If the read operation on the foreign table falls back to the SQE path during this adjustment, some data segments might be skipped, resulting in partial data loss.

When foreign table reads fall back to the SQE path, the adaptive import feature may drop data segments, causing data loss.

Affected versions:

  • V3.0.1 to V3.0.46.

  • V3.1.1 to V3.1.27.

  • V3.2.1 to V3.2.9.

Fixed versions:

  • V3.0.47 and later.

  • V3.1.28 and later.

  • V3.2.10 and later.

Disable the adaptive import feature at the instance level by setting the following GUC:

ALTER ROLE ALL SET hg_experimental_enable_adaptive_adjust_bulkload_dop = off;

P1

After you configure data masking, an UPDATE operation on a table can return unmasked data in query results. For example:

create table tb1(id int, data text);
create table tb2(id int, data text);
insert into tb1 select i, i::text from generate_series(1, 10) i;
insert into tb2 select i, null from generate_series(1, 10) i;
security label for hg_anon on column tb1.data is 'default_value';

set hg_anon_enable = t;
update tb2 set data = tb1.data from tb1 where tb1.id = tb2.id;
SELECT * FROM tb2 LIMIT 2;
id	| data
----|----
1	  | 1
2	  | 2

When data masking is enabled, the UPDATE statement incorrectly handles masked fields.

Affected versions:

  • V3.1.0-V3.1.31

Fixed versions:

  • V3.1.32

Upgrade to the latest version.

P1

After you restart an instance, dynamic tables no longer refresh automatically.

An issue in the backend scheduling system causes this behavior.

Affected versions:

  • V3.0.0-V3.0.45

  • V3.1.0-V3.1.24

  • V3.2.0-V3.2.6

Fixed versions:

  • V3.0.46

  • V3.1.25

  • V3.2.7

  • V4.0.0

Upgrade to the latest version.

P1

For a dynamic table with logical partitions and auto-refresh enabled, when an active partition becomes inactive, it may fail to switch from incremental refresh to full refresh mode. This results in continuous storage growth.

The system incorrectly handles the state transition of active partitions in a dynamic table.

Affected versions:

  • V3.1.0-V3.1.23

  • V3.2.0-V3.2.6

Fixed versions:

  • V3.1.24

  • V3.2.7

Upgrade to the latest version.

P2

When you configure a dynamic table with a nullable clustering key, executing an ALTER DYNAMIC TABLE statement fails with the error clustering_key should not be nullable.

The ALTER DYNAMIC TABLE statement fails to correctly infer the properties of the clustering key.

Affected versions:

  • V3.1.0-V3.1.31

  • V3.2.0-V3.2.11

Fixed versions:

  • V3.1.32

  • V3.2.12

Upgrade to the latest version.

P2

For a column-oriented table without a clustering key, duplicate primary keys can occur. This issue can arise if you perform an offline import using INSERT ON CONFLICT DO UPDATE and then perform real-time writes.


The system incorrectly handles primary key data during an offline import. As a result, subsequent real-time writes fail to detect the existing keys, leading to potential primary key duplication.

Affected versions:

  • V3.1.0-V3.1.29

  • V3.2.0-V3.2.9

  • V4.0.0-V4.0.1

Fixed versions:

  • V3.1.30

  • V3.2.10

  • V4.0.2

Upgrade to the latest version.

P2

When you perform an INSERT ON CONFLICT operation with duplicate primary keys, the system may still report a duplicate key value violates unique constraint error, even if the hg_experimental_affect_row_multiple_times_keep_last GUC is enabled.

When duplicate data is encountered, the hg_experimental_affect_row_multiple_times_keep_last GUC does not take effect, causing a primary key constraint violation.

Affected versions:

  • V3.1.0-V3.1.29

  • V3.2.0-V3.2.9

  • V4.0.0-V4.0.1

Fixed versions:

  • V3.1.30

  • V3.2.10

  • V4.0.2

Upgrade to the latest version.

P2

After an upgrade to V3.1, querying a view that contains masked columns may fail with a relation "xxx" does not exist error.

This error occurs because the data masking feature in V3.1 incorrectly processes table names within views.

Affected versions:

  • V3.1.0-V3.1.22

  • V3.2.0-V3.2.5

Fixed versions:

  • V3.1.23

  • V3.2.6

Upgrade to the latest version.

P2

When you use hg_insert_overwrite to read from a related foreign table in an external database, the SQL query may hang.

The hg_insert_overwrite command times out when accessing tables in the external database, causing the query to hang.

Affected versions:

  • V3.1.0-V3.1.21

  • V3.2.0-V3.2.4

Fixed versions:

  • V3.1.22

  • V3.2.5

Upgrade to the latest version.

August 2025

Level

Description

Cause

Versions

Workaround

P1

A worker node could hang when a query request completes, blocking subsequent DDL operations and queries with a LIMIT clause on related tables. This issue was triggered when the query request:

  • Resulted in an out-of-memory (OOM) error.

  • Was manually canceled.

  • Was manually canceled or terminated by an exception.

The cause was a defect in the query engine's resource cleanup process after a query finished.

Affected versions:

  • V3.1.18

  • V3.2.3

Fixed versions:

  • V3.1.21 and later

  • V3.2.5 and later

  • Upgrade to the latest version.

  • If a hang occurs, restart the instance or virtual warehouse.

  • Alternatively, disable the new query engine by running this command:

    ALTER ROLE ALL SET hg_experimental_enable_qe_v2=off;

P1

When using Holo Client V2.6.0 to connect to a Hologres instance with an Alibaba Cloud AccessKey (for an Alibaba Cloud account, RAM user, or RAM role), the connection failed during a specific time window each day. This time window depended on the client time zone. For example, in UTC+8, connections failed from 00:00:00+08 to 08:00:00+08, and in UTC-5, they failed from 19:00:00-05 to 00:00:00-05.

The cause was an issue with time zone handling in Holo Client V2.6.0.

This issue is specific to Holo Client V2.6.0 and is independent of the Hologres instance version.

Upgrade Holo Client to V2.6.1 or later.

P0

In Hologres V3.1, an instance could enter a continuous restart loop if it had a read-only dynamic table that consumed base table data in stream mode.

This occurred because data flushing failed when the dynamic table was in a read-only state, which triggered continuous instance restarts.

Affected versions:

  • V3.1.1 to V3.1.20

  • V3.2.1 to V3.2.2

Fixed versions:

  • V3.1.21 and later

  • V3.2.3 and later

Upgrade to the latest version.

July 2025

Level

Description

Cause

Affected and fixed versions

Workaround

P2

When a data import job using Serverless Computing fails, it may leave undeleted intermediate files, increasing the instance's storage usage.

The cleanup logic for intermediate files can occasionally fail.

Affected: V3.1.1.

Fixed in: V3.1.20 and later.

  • Restart the instance to clean up intermediate files.

  • Upgrade to the latest version.

P2

Querying data from an Iceberg foreign table by using Data Lake Formation (DLF) returns an empty result set.

A file parsing error occurs when querying the Iceberg table, resulting in an empty result set.

Affected: V3.1.1 to V3.1.16.

Fixed in: V3.1.17 and later.

Upgrade to the latest version.

P2

When you query a table that contains a generated column, the query fails with the error ERROR: ORCA failed to produce a plan : Query Translation: No variable entry found due to incorrect normalization of query. Example SQL:

CREATE TABLE lpt1 (
  a TEXT,
  b INT,
  ts TIMESTAMP NOT NULL,
  d TIMESTAMP GENERATED ALWAYS AS (date_trunc('day', ts)) STORED NOT NULL
)
LOGICAL PARTITION BY LIST(d);

CREATE VIEW v1 AS SELECT * FROM lpt1;

SELECT * FROM v1 WHERE ts >= '2025-03-12 01:00:00';

The query fails because the optimizer incorrectly translates the generated column.

Affected: V3.1.1 to V3.1.16.

Fixed in: V3.1.17 and later.

Upgrade to the latest version.

P1

When you create a Dynamic Table and the source query contains a BOOLEAN data type, the refresh operation fails with the error ERROR: Internal error: HGERR_code XX000 HGERR_msge can not get pg type string %s: id: UINT8.

The refresh operation fails because the Dynamic Table feature incorrectly infers the data type for BOOLEAN fields.

Affected: V3.1.1 to V3.1.15.

Fixed in: V3.1.16 and later.

Upgrade to the latest version.

P2

After an upgrade to Hologres V3.1, the hg_dynamic_table_state_size function returns an empty result set.

The hg_dynamic_table_state_size function is not compatible with V3.1.

Affected:

  • V3.1.1 to V3.1.15

  • V3.2.0 to V3.2.1

Fixed in:

  • V3.1.16 and later

  • V3.2.2 and later

Upgrade to the latest version.

P2

In Hologres V3.1, dropping a Dynamic Table configured for incremental refresh does not delete its state table.

Dropping a Dynamic Table that uses incremental refresh fails to clean up the associated state table.

Affected: V3.1.1 to V3.1.12.

Fixed in: V3.1.13 and later.

Upgrade to the latest version.

P2

Using 64-bit RoaringBitmap functions, such as rb_or_cardinality_agg, across different schemas results in the error: Unsupported agg function:public.rb_or_cardinality_agg.

Incorrect schema inference for 64-bit RoaringBitmap functions causes cross-schema queries to fail.

Affected:

  • V3.1.1 to V3.1.11

  • V3.2.0

Fixed in:

  • V3.1.12 and later

  • V3.2.1 and later

Upgrade to the latest version.

P2

Creating a Dynamic Table as a logical partitioned table fails if the base table has a NOT NULL column, returning the error: failed:the index xx "xxx" should not by nullable. Example SQL:

CREATE TABLE t1 (
    day DATE,
    key INT NOT NULL,
    val TEXT
);

INSERT INTO t1 VALUES ('20201010', 1, '2'), ('20201111', 2, '4'), ('20201212', 3, 'test');

CREATE DYNAMIC TABLE dt1 
logical PARTITION BY LIST (day) 
WITH (
    clustering_key = 'day', 
    segment_key = 'day', 
    auto_refresh_mode = 'incremental', 
    freshness = '1 hour') AS
SELECT
    day, MAX(key), val
    FROM t1
    GROUP BY day, val;
failed:the index xx "xxx" should not by nullable

The failure is caused by incorrect inference of the NOT NULL attribute for the Dynamic Table.

Affected:

  • V3.1.1 to V3.1.11

  • V3.2.0

Fixed in:

  • V3.1.12 and later

  • V3.2.1 and later

Upgrade to the latest version.

P2

If a materialized view on a single table contains a SUM(DECIMAL) aggregation, the instance may briefly restart.

When calculating SUM(DECIMAL) for a materialized view, a memory misalignment issue can cause the instance to generate a core dump.

Affected:

  • V3.1.1 to V3.1.17

  • V3.0.41 to V3.0.43

  • V3.2.0 to V3.2.1

Fixed in:

  • V3.1.17 and later

  • V3.0.44 and later

  • V3.2.2 and later

Upgrade to the latest version.

P1

After an upgrade to Hologres V3.0.41, querying a MaxCompute foreign table through the CommonTable access path causes a slow increase in memory usage.

A memory leak occurs when querying MaxCompute foreign tables through the CommonTable access path.

Affected:

  • V3.1.1 to V3.1.17

  • V3.0.41 to V3.0.43

  • V3.2.0 to V3.2.1

Fixed in:

  • Version 3.1.17 or later.

  • V3.0.44 and later

  • V3.2.2 and later

Upgrade to the latest version.

P0

In certain concurrent scenarios, running DML operations with Serverless Computing on a table while executing TRUNCATE TABLE or DROP TABLE on the same table can cause read/write exceptions on the table's shard. This is caused by an internal engine state synchronization issue.

A concurrency issue in the engine can cause an abnormal internal state within a shard, making it temporarily unable to serve read or write requests. This issue may also impact access to other tables.

Affected:

  • V2.1.45 and earlier

  • V2.2.45 and earlier

Fixed in:

  • V2.1.46

  • V2.2.46

  • V3.0.27 and later

  • V3.1.1 and later

  • Temporary workarounds:

    • Schedule DML and TRUNCATE TABLE/DROP TABLE operations to run at different times.

    • Do not use Serverless Computing to perform DML operations.

  • Recommended solution:

    Upgrade to the latest version.

June 2025

Level

Description

Cause

Affected and fixed versions

Workaround

P1

A compute node could occasionally restart when you scaled out a virtual warehouse instance.

Concurrent DML task and compaction task operations on a table could trigger this issue during the scale-out.

Affected version: V3.0.1.

Fixed versions: V3.0.28 and later.

Upgrade to the latest version.

P1

An instance could restart unexpectedly when the JSONB columnar storage optimization was used with a GIN index.

An incompatibility between the JSONB columnar storage optimization and GIN index caused this issue.

Affected version: V3.1.1.

Fixed versions:

  • V3.0.42 and later.

  • V3.1.10 and later.

  • Delete the GIN index from the table.

  • Upgrade to the latest version.

P2

An instance could restart when you refreshed a dynamic table based entirely on views.

A processing error caused a core dump when refreshing a dynamic table that used views as base tables.

Affected version: V3.1.8.

Fixed versions: V3.1.9 and later.

Upgrade to the latest version.

P2

In the incremental refresh mode for a dynamic table, a query with the ARRAY_AGG function returned an empty result instead of null when the aggregate filter removed all data.

None.

Affected versions:

  • V3.0.40.

  • V3.1.7.

Fixed versions:

  • V3.0.41 and later.

  • V3.1.8 and later.

Upgrade to the latest version.

P1

The property-based funnel function (finder_funnel) returned incorrect results when a time zone was specified. Example SQL:

SELECT
    id,
    finder_funnel (86400000, 57600, 86400, 2, 3, 0, 'Asia/Shanghai', TRUE, eventtime * 1000, eventtime * 1000, event = 1000, event = 1001, event = 1002)
FROM
    a
GROUP BY
    id
ORDER BY
    id;

The finder_funnel function incorrectly discarded the specified time zone and defaulted to UTC.

Affected version: V3.0.40.

Fixed versions: V3.0.41 and later.

Upgrade to the latest version.

P2

In a virtual warehouse instance, the PG_RELATION_SIZE, PG_DATABASE_SIZE, and HOLOGRES.HG_RELATION_SIZE functions returned an incorrect storage size.

In a virtual warehouse instance, using PG_RELATION_SIZE to query the storage size results in an overestimated value, leading to an incorrect result.

Affected version: V3.0.39.

Fixed versions: V3.0.40 and later.

Upgrade to the latest version.

P2

In incremental refresh mode, a dynamic table refresh failed with an ERROR: internal error: Filter has 1 rows but length of columns error if the base table contained multiple duplicate rows.

The incremental refresh process failed to correctly handle multiple duplicate rows within a single refresh operation.

Affected version: V3.0.39.

Fixed versions: V3.0.40 and later.

Upgrade to the latest version.

P2

The incremental refresh operation for a dynamic table failed with an XX000: internal error: Not Implements error if the operation involved a multi-table join and one of the tables contained an ARRAY field.

The incremental refresh process for multi-table joins could not correctly handle tables with an ARRAY field.

Affected versions:

  • V3.0.38.

  • V3.1.2.

Fixed versions:

  • V3.0.39 and later.

  • V3.1.3 and later.

Upgrade to the latest version.

P1

An instance could restart when committing a transaction that wrote to a table with logical partitions, if high partition key cardinality caused the partition count to exceed the 5,200 limit.

The instance created a core dump because during a transaction commit, the process detected that the number of logical partitions in the table exceeded the limit.

Affected version: V3.1.1.

Fixed versions: V3.1.9 and later.

Clean the partition key data in your import jobs to prevent creating an excessive number of partitions.

April 2025

Level

Description

Cause

Affected, fixed versions

Workaround

P2

Fixed an issue where reading from a MaxCompute foreign table failed with an error: ERROR: XX000: internal error: max compuate csdk get next error: storage/formats/orcfile/orc_reader.cpp(362): RetryableStorageException: ODPS-0010000:BadAllocError:allocated pointer 1b658028 not aligned with 64.

An interface conversion error occurred when reading the MaxCompute foreign table.

Affected versions: V3.0.1 to V3.0.35.

Fixed versions: V3.0.36 and later.

Upgrade to the latest version.

P2

Fixed an issue where using hg_create_table_like to copy a table comment failed.

The hg_create_table_like function incorrectly copied the table comment as a column comment.

Affected versions: V3.0.1 to V3.0.33.

Fixed versions: V3.0.34 and later.

Upgrade to the latest version.

P2

Fixed an issue where a query on a data lake foreign table failed with an error: ERROR: failed to get foreign table split from hive:Failed to generate splits: IllegalStateException: Weights must be non-negative.

A data format conversion error occurred when reading the foreign table.

Affected versions: V3.0.1 to V3.0.30.

Fixed versions: V3.0.31 and later.

Upgrade to the latest version.

P1

Fixed an issue where using the ARRAY_AGG function could intermittently cause continuous memory growth.

A memory leak in the ARRAY_AGG function.

Affected versions: V3.0.1 to V3.0.29.

Fixed versions: V3.0.30 and later.

Upgrade to the latest version.

P2

Fixed an issue where a CTE query containing a nested loop join failed with an error: Cannot open a fragment with explicit_seek set to false.

The optimizer incorrectly deduced the join order.

Affected versions: V3.0.1 to V3.0.27.

Fixed versions: V3.0.28 and later.

Upgrade to the latest version.

P2

Fixed an issue where using the GENERATE_SERIES function with DECIMAL type fields failed with an error: generate series first and second arguments should has same type.

The optimizer incorrectly deduced the precision for the DECIMAL type field.

Affected versions: V3.0.1 to V3.0.25.

Fixed versions: V3.0.26 and later.

Upgrade to the latest version.

P2

Fixed an issue where the query_id field in the hg_stat_activity view was inaccurate when engine_type was set to {PG}.

hg_stat_activity reported a disordered query_id when engine_type was set to {PG}.

Affected versions: V3.0.1 to V3.0.25.

Fixed versions: V3.0.26 and later.

Upgrade to the latest version.

March 2025

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Fixed an issue where using a window function, such as ROW_NUMBER() OVER, to process the lc_state_split_idx field caused an ORCA failed to produce a plan error.

The window function incorrectly identified the lc_state_split_idx field as a keyword, causing an incorrect truncation. This prevented the generation of an execution plan and caused the SQL query to fail.

Affected: V3.0.24 and earlier.

Fixed: V3.0.25 and later.

Upgrade to the latest version.

P1

Fixed an issue that prevented a manually specified distribution key in a dynamic table from taking effect.

An engine inference error caused the manually specified distribution key to be ignored.

Affected: V3.0.24 and earlier.

Fixed: V3.0.25 and later.

Upgrade to the latest version.

February 2025

Level

Description

Cause

Affected and fixed versions

Workarounds

P1

When connecting to a Hologres instance with a BI or developer tool, unauthorized users can see database, schema, and table metadata.

Access control for metadata is not sufficiently strict.

Affected: V3.0.23 and earlier.

Fixed: V3.0.24 and later.

Upgrade to the latest version.

P2

When joining a MaxCompute foreign table with a hologres_fdw foreign table, the query fails with the error error: Build desc failed: Fetch table group shards failed on meta proxy.

A logic error occurs during shard pruning on an internal table during a join between a hologres_fdw foreign table and a MaxCompute foreign table.

Affected: V3.0.22 and earlier.

Fixed: V3.0.23 and later.

Upgrade to the latest version.

P2

After a Hologres instance is upgraded to V2.2, using the GENERATE_SERIES set-returning function to process a DECIMAL field fails with the error error: generate series first and second arguments should has same type.

The query fails because the optimizer incorrectly infers the precision of the DECIMAL type when the GENERATE_SERIES function processes a DECIMAL field.

Affected: V2.2.22 and earlier.

Fixed: V2.2.23 and later.

Upgrade to the latest version.

P2

When a data masking rule for an account is set to all:unmasked, the rule does not take effect, and the queried data is still masked.

After a data masking rule is set, the system fails to correctly evaluate the rule for the account.

Affected:

  • V3.0.1 and earlier.

  • V2.2.21 and earlier.

Fixed:

  • V3.0.2 and later.

  • V2.2.22 and later.

Upgrade to the latest version.

P2

When consuming Hologres binary logs in JDBC mode, jobs may throw exceptions such as Binlog Convert Failed and Java heap space, or data consumption from some shards may stop unexpectedly.

If a downstream Flink operator experiences backpressure during binary log consumption, data from the source table is not consumed promptly. This causes the backend to throw a timeout exception. The gateway then incorrectly forwards this exception to the client, causing the data consumption job to hang or fail with a parsing error.

  • Affected: V2.2.21 and earlier.

  • Fixed: V2.2.22 and later.

Upgrade to the latest version and restart the Flink job.

P2

If column-oriented storage optimization is enabled for a JSONB column that also has a bitmap index, flush and compaction may fail after data is written. This increases instance storage consumption and memory usage.

A defect in the JSONB column-oriented storage optimization prevents it from correctly handling a bitmap index on the BINARY type.

Affected:

  • V3.0.1 to V3.0.9.

  • V2.2.31 and earlier.

Fixed:

  • V3.0.10 and later.

  • V2.2.32 and later.

  • Upgrade to the latest version.

  • Alternatively, disable column-oriented storage optimization for the table and rebuild the table.

January 2025

Level

Description

Cause

Versions

Workarounds

P2

The array_agg function returns incorrect results when used in a window function. Example:

CREATE TABLE ttt(a text, b int);
INSERT INTO ttt VALUES ('0101', 1), ('0102', 2), ('0103', 3);
SELECT a, array_agg(b) OVER (ORDER BY a DESC) FROM ttt;
--Execution result:
a	array_agg
0103	{3}
0102	{2}
0101	{1}

--Correct result:
a	array_agg
0103	{3}
0102	{3,2}
0101	{3,2,1}

The array_agg function produces incorrect results with a window function due to a calculation logic error.

Affected versions:

  • V3.0.1 to V3.0.21.

  • V2.2.38 and earlier.

Fixed in:

  • V3.0.22 and later.

  • V2.2.39 and later.

Upgrade to the latest version.

P2

Querying an external table fails if a column name contains uppercase characters:

CREATE TABLE 'dlf_paimon'.'ods'.'ods_test' ( 'ID' VARCHAR(64) NOT NULL) WITH ( 
  'bucket' = '1', 
  'path' = 'dls://xxx', xxx );
  SELECT * FROM 'dlf_paimon'.'ods'.'ods_test' ;
  ERROR: internal : scan column 'ID' cannot be found in Paimon table

A case conversion error causes queries on external tables with uppercase column names to fail.

  • Affected versions: V3.0.18 and earlier.

  • Fixed in: V3.0.19 and later.

Upgrade to the latest version.

P2

Querying a table in DLF fails if an OSS endpoint is not configured. The following error is reported:

SELECT * FROM openlake_demo_dlf.github_events.ods_github_events_raw;

--Error message
ERROR: internal error: external dataset reader missing required oss_endpoint option.

Without a configured OSS endpoint, the system cannot route to the corresponding OSS table, causing the query to fail.

  • Affected versions: V3.0.17 and earlier.

  • Fixed in: V3.0.18 and later.

Upgrade to the latest version.

Note

After upgrading, you can query tables without configuring an OSS endpoint.

2024 defects

December 2024

Level

Description

Cause

Affected / Fixed versions

Workaround

P2

A full or incremental refresh of a dynamic table containing a DECIMAL field fails with the error column type doesn't match, decimal(28, 10) v.s. decimal(38, 10).

The refresh fails because the system incorrectly infers the precision of the DECIMAL field.

Affected: V3.0.16 and earlier.

Fixed: V3.0.17 and later.

  • Manually specify the precision of the DECIMAL field in the query.

  • Upgrade to the latest version.

P2

If the query schemas on both sides of a UNION ALL operator are inconsistent, the query fails with the error schema's field number from producers are not equal [1 vs 0].

Incorrect schema inference for the UNION ALL operator causes this error.

Affected: V3.0.16 and earlier.

Fixed: V3.0.17 and later.

Upgrade to the latest version.

P2

Aggregating a SMALLINT field in a dynamic table during an incremental refresh causes an 'unsupported' error.

The incremental refresh process for dynamic tables does not fully support the SMALLINT type.

Affected: V3.0 to V3.0.16.

Fixed: V3.0.17 and later.

Upgrade to the latest version.

P2

After you upgrade a virtual warehouse instance, queries fail with the error CreateFile ignore since it's not leader.

During a virtual warehouse upgrade, the system fails to update table metadata promptly. This causes subsequent queries to use outdated table metadata, leading to errors.

Affected:

  • V3.0.12 to V3.0.15.

  • V2.0.35 and earlier.

Fixed:

  • V3.0.16 and later.

  • V2.2.36 and later.

  • Restart the upgraded virtual warehouse.

  • Upgrade to the latest version.

P1

After an upgrade to Hologres V3.0.12–V3.0.15, dynamic partitioning scheduling can fail for tables that use a TEXT partition key. This failure prevents the creation of new partitioned tables.

The scheduling system mishandles TEXT partition keys, causing an internal conversion to fail. This, in turn, prevents table creation.

Affected: V3.0.12 to V3.0.15.

Fixed: V3.0.16 and later.

Upgrade to the latest version.

P1

After you upgrade Hologres to a version from V3.0 to V3.0.13, queries on MaxCompute foreign tables become slower.

Hologres V3.0 introduced stricter permission checks for accessing MaxCompute table metadata. These new checks cause the frontend (FE) node to make multiple, redundant calls, degrading query performance on MaxCompute foreign tables.

Affected: V3.0 to V3.0.13.

Fixed: V3.0.14 and later.

Upgrade to the latest version.

November 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P2

When you enable Binlog in Dynamic Table full refresh mode, the Refresh operation reports the error ERROR: internal error: refresh table failed: internal error: new_values is missing col.

When the binary log is enabled for a dynamic table in full refresh mode, inconsistent derivation of hidden columns causes the refresh operation to fail.

Affected versions: V3.0.11 and earlier.

Fixed versions: V3.0.12 and later.

Upgrade to the latest version.

Note

We do not recommend enabling Binlog in full refresh mode because each full refresh is equivalent to executing INSERT OVERWRITE, which causes the Binlog to be incomplete.

P2

In the SLPM permission model, deleting and then recreating the Orafce extension causes an error: "role slpm xxx already exists".

In the SLPM permission model, dropping the Orafce extension does not completely remove user group permissions. As a result, the user group persists, preventing the extension from being recreated.

Affected versions: V3.0.9 and earlier.

Fixed versions: V3.0.10 and later.

  • Switch from the SLPM permission model to the standard PostgreSQL authorization model, then recreate the Orafce extension.

  • Upgrade to the latest version.

P2

Refreshing a Dynamic Table that contains a Decimal field causes the error invalid definition of a numeric type.

Incorrect precision inference for the Decimal field causes a precision mismatch during the dynamic table refresh.

Affected versions: V3.0.9 and earlier.

Fixed versions: V3.0.10 and later.

  • Manually specify the precision of the Decimal field when you create the dynamic table.

  • Upgrade to the latest version.

P2

For queries that run longer than 10 seconds, the Plan column in the metadata warehouse occasionally lacks EXPLAIN ANALYZE results.

Occasional reporting delays for queries that run longer than 10 seconds prevent the Plan column from collecting results.

Affected versions:

  • V3.0.8 and earlier.

  • V2.2.33 and earlier.

Fixed versions:

  • V3.0.9 and later.

  • V2.2.34 and later.

Upgrade to the latest version.

P2

Analyzing a table with the BIS type reports the error Not supported type: bsi0.] in cache failed.

This issue occurs because support for analyzing BSI-type fields is incomplete.

Affected versions:

  • V3.0.9 and earlier.

  • V2.2.31 and earlier.

Fixed versions:

  • V3.0.10 and later.

  • V2.2.32 and later.

Upgrade to the latest version.

P2

After using hg_insert_overwrite, the generated temporary table is not automatically cleaned up.

The temporary table was not cleaned up because the cleanup mechanism was not triggered during the hg_insert_overwrite process.

Affected versions: V2.2.30 and earlier.

Fixed versions: V2.2.31 and later.

Upgrade to the latest version.

P2

On an instance with frequent DDL operations, performing a TRUNCATE operation while FE node versions are inconsistent prevents the operation from being canceled. This can lead to data inconsistency.

Inconsistent FE node versions can cause the node relay to stall and subsequent DDL operations to fail. As a result, DROP or TRUNCATE operations run during this period cannot be canceled.

Affected versions: V2.2.26 and earlier.

Fixed versions: V2.2.27 and later.

Upgrade to the latest version.

P2

Executing an SQL statement that is too long and exceeds the limit causes the following error: ERROR: Current query length xxx exceeds the limit 10000000.

Hologres limits the length of SQL statements to a default of 10,000,000 characters.

Introduced in versions:

  • V2.2.22 and later.

  • V3.0.1 and later.

To remove the SQL length limit, set the following parameter:

ALTER DATABASE db_name SET hg_experimental_query_length_limit = 0;

September 2024

Level

Description

Cause

Affected/fixed versions

Workaround

P1

A concurrent DDL operation on a table may cause a query to hang if it is executed after the database's first DML transaction.

The first DML transaction in a database acquired a table lock. A subsequent, concurrent DDL operation on the same table then caused the system to enter a creation loop, leading to a deadlock that hung the query.

Affected versions: V2.2.24 and earlier.

Fixed versions: V2.2.25 and later.

Upgrade to the latest version.

P2

For a Hologres table that contains a field of the roaringbitmap type, when you use the CREATE FOREIGN TABLE command to create a foreign table for cross-database queries without including the roaringbitmap field, the foreign table is created successfully. However, an error cache lookup failed for type 22243 is reported when you query this table by using SELECT * FROM.

Foreign tables for cross-database queries do not support the roaringbitmap type. This should have been validated when the foreign table was created.

Affected versions: V2.2.24 and earlier.

Fixed versions: V2.2.25 and later.

Upgrade to the latest version.

Note

After the upgrade, if a foreign table in a cross-database query contains a roaringbitmap type, the query fails with an error indicating that the type is not supported.

P2

Using the JDBC prepareStatement method to repeatedly execute the CREATE EXTENSION command causes it to fail with an unrecognized extension: "PostgreSQL JDBC Driver" error. This issue is specific to this method. Example code:

Connection conn = DBInitializer.BuildSlaveDsOnHolo().getConnection();
List sqls = Arrays.asList(
    "SET application_name TO 'PostgreSQL JDBC Driver'",
    "CREATE EXTENSION IF NOT EXISTS hologres_fdw"
    );

Repeatedly running the CREATE EXTENSION command in a loop with the JDBC prepareStatement method corrupted the cache, which caused the failure.

Affected versions:

  • V2.2.23 and earlier.

  • V3.0.3 and earlier.

Fixed versions:

  • V2.2.24 and later.

  • V3.0.4 and later.

  • Run the CREATE EXTENSION command only once per database.

  • Upgrade to the latest version.

P2

The values of result_rows and affected_rows in the metadata warehouse Query Log do not match the actual values.

The metadata warehouse incorrectly reported the result_rows and affected_rows values, which caused the discrepancy.

Affected versions: V2.2.22 and earlier.

Fixed versions: V2.2.23 and later.

Upgrade to the latest version.

P2

Restarting the primary virtual warehouse can slow down point queries on a secondary virtual warehouse.

When the primary virtual warehouse restarted, shards in the secondary virtual warehouse continuously polled the primary shard's status. This polling caused point queries to hang until all shards recovered.

Affected versions: V2.2.21 and earlier.

Fixed versions: V2.2.22 and later.

Upgrade to the latest version.

P2

The BSI_SUM function returns an incorrect result if the sum of all elements in the result array exceeds 2^31.

The function mishandled a data overflow condition.

Affected versions: V2.1.1 and later.

Fixed versions: Pending.

  • Upgrade to the latest version after the fix is released.

  • Rewrite the SQL query. Example:

    SELECT SUM(a[2]) FROM (SELECT BSI_ITERATE(BSI_BUILD('{20240901,1}','{3101397531,100}')) a) b;

P2

New connections to a Hologres instance may occasionally time out or hang.

A process within a node occasionally hangs, which prevents that node from creating new connections.

Affected versions: V2.2.22 and earlier, V2.1.42 and earlier, V2.0.45 and earlier, and V1.3.70 and earlier.

Fixed versions: The following versions and later: V3.0.4, V2.2.23, V2.1.43, V2.0.46, and V1.3.71.

  • Short-term solution: Restart the instance to temporarily resolve the issue.

  • Long-term solution: Upgrade to the latest patch version for your major version.

August 2024

Level

Description

Cause

Affected and fixed

Workaround

P2

When a virtual warehouse becomes unavailable (for example, while restarting), latency increases for point queries from other virtual warehouses on tables in a table group loaded by that warehouse.

A bug in an internal module of the real-time read/write path causes a virtual warehouse to wait for the table group status during point queries, increasing latency.

Affected: V2.1.1 to V2.2.21.

Fixed: V2.2.22 and later.

Upgrade to the latest version.

P1

Using Fixed Plan for real-time writes at over 1 million QPS creates a small risk of write failures and instance restarts.

A bug in the memory manager of the real-time read/write path.

Affected:

  • V2.0.1 to V2.0.43.

  • V2.1.1 to V2.1.36.

  • V2.2.1 to V2.2.8.

Fixed:

  • V2.0.44 and later (V2.0).

  • V2.1.37 and later (V2.1).

  • V2.2.9 and later (V2.2).

Upgrade to the latest version.

July 2024

Level

Description

Cause

Affected versions

Workaround

P1

A Flink job reading Hologres binary logs in jdbc or jdbc_fixed mode may hang or trigger a failover if backpressure causes a backend timeout.

An issue in how the gateway returns a backend timeout exception to the client causes data reading to hang or fail with a parsing error.

Affected: V1.3 and later.

Fixed: V2.2.21 and later.

Restart the Flink job from the latest checkpoint and upgrade to the latest version.

P2

In V2.2 and later, the Parallel Query Engine (PQE) executes COUNT DISTINCT operations that use shard pruning (where the execution plan includes a shard prune operator), which degrades performance.

CREATE TABLE t1 (a int, b int) WITH (distribution_key = 'b');
INSERT INTO t1 VALUES(1,1),(2,2),(3,3),(4,4);
EXPLAIN SELECT count(DISTINCT a) FROM t1 WHERE b =1;
--The following result is returned:
QUERY PLAN
Final Aggregate  (cost=0.00..105.00 rows=1 width=8)
  ->  Partial Aggregate  (cost=0.00..5.00 rows=1 width=8)
        ->  Partial HashAggregate  (cost=0.00..5.00 rows=10 width=4)
              Group Key: a
              ->  Local Gather  (cost=0.00..5.00 rows=32 width=4)
                    ->  Partial HashAggregate  (cost=0.00..5.00 rows=32 width=4)
                          Group Key: a
                          ->  Seq Scan on t1  (cost=0.00..5.01 rows=1000 width=4)
                                Shard Prune: Eagerly
                                Shards selected: 1 out of 21
                                Filter: (b = 1)
                                RowGroupFilter: (b = 1)
Optimizer: HQO version 2.2.0

The system incorrectly infers the execution plan for COUNT DISTINCT when shard pruning is applied. This causes PQE to execute the query, degrading performance.

Affected: V2.2.1 to V2.2.18.

Fixed: V2.2.19 and later.

  • Upgrade to the latest version.

  • Replace COUNT DISTINCT with UNIQ.

P2

In the slow query log (the query_log table), the date format for the query_start field is 2024-07-08 22:00:00, while the format for the query_date field is 19700101.

The system collects the query_date field for the slow query log incorrectly.

Affected: V2.2.1 to V2.2.18.

Fixed: V2.2.19 and later.

Upgrade to the latest version.

P2

When writing to a partitioned child table, if the COPY column list includes the partition key column, non-zero values can be incorrectly written into a partition defined for the value 0. This can lead to dirty data in the partition key column.

begin;
create table tp(a int, b int) partition by list (a);
create table c0 partition of tp for values in (0);
commit;

COPY c0 FROM stdin WITH (stream_mode ON, format 'csv', null 'null');

# Input
1,0
null,0
\.

When you write to a partitioned child table and the COPY column list includes the partition key column, the system does not validate the partition key when the partition value is 0. This allows dirty data to be written.

Affected: V2.2.1 to V2.2.18.

Fixed: V2.2.19 and later.

Upgrade to the latest version.

P2

When the time zone is explicitly set to SET timezone='+8' in the connection string and a query contains a PQE date function such as to_char, the query incorrectly returns results for the UTC-8 time zone instead of the expected UTC+8. Example:

CREATE TABLE date_test(a timestamptz);
--Expected result: 2001-09-28
INSERT INTO date_test VALUES ('2001-09-28 03:00:00+08');
SELECT to_char(a, 'YYYY-MM-DD') FROM date_test;

--Incorrect result: 2001-09-27
SET hg_experimental_udf_pushdown_blacklist =timestamptz_to_char;
SET timezone='+8';
SELECT to_char(a, 'YYYY-MM-DD') FROM date_test;

PQE incorrectly calculates the time zone from the connection string when parsing date functions.

Affected: V2.2.1 to V2.2.18.

Fixed: V2.2.19 and later.

Upgrade to the latest version.

P2

Calling the pad_sub_cost function fails with the error Column should be non-nullable but the values contain 609 nulls.

The pad_sub_cost function incorrectly infers the nullable property during calculation, which causes the query to fail.

Affected: V2.2.1 to V2.2.18.

Fixed: V2.2.19 and later.

Upgrade to the latest version.

P0

When you use dynamic partition management and set time_unit to MONTH (monthly dynamic partitions), the system may erroneously create a future partition or delete the current partition.

Starting from V2.2, the dynamic partition management feature supports a custom scheduling start time, but the time calculation for monthly partitions is incorrect.

Affected: V2.2.1 to V2.2.17.

Fixed: V2.2.18 and later.

Upgrade to the latest version.

June 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P1

Executing thehg_insert_overwrite, CREATE TABLE AS,

andCOPY commands on a foreign table results in the following error: Fail to access foreign data as user xxx, no token found in request header.

Since V2.2, MaxCompute foreign table operations have required authentication through a service-linked role (SLR). However, due to an implementation issue, users who had already created an SLR encountered an access failure when executing thehg_insert_overwrite, CREATE TABLE AS,

andCOPY commands.

Affected versions:

V2.2.1 to V2.2.14.

Fixed versions:

V2.2.15 and later.

Upgrade to the latest version.

P1

If a source table contains duplicate data, executing anUPDATE orUPSERT operation with deduplication based on the primary key may occasionally result in duplicate data in the target table, even if the table data TTL has not expired.

During anUPDATE orUPSERT operation, the target table and source table are joined. If the join keys of the two tables are different, the target table may be redistributed. In this scenario, if the source table has duplicate data, the optimizer may handle it incorrectly. This can lead to a deduplication failure and result in a duplicate primary key.

Affected versions:

V2.2.13 and earlier.

Fixed versions:

V2.2.14 and later.

Upgrade to the latest version.

P2

When using Flink to read data from Paimon and write it to Hologres, VARCHAR data can be written as garbled characters.

VARCHAR data in Paimon: Chinese characters
VARCHAR data in Hologres: ??? (garbled characters)

Hologres incorrectly converts Paimon VARCHAR data, causing garbled characters.

Affected versions:

V2.2.12 and earlier.

Fixed versions:

V2.2.13 and later.

Upgrade to the latest version.

P2

TheIS DISTINCT FROM syntax handles NaN data inconsistently with PostgreSQL.

--PostgreSQL behavior:
CREATE TABLE test_f8 (a float8);
INSERT INTO test_f8 VALUES ('NaN');
SELECT * FROM test_f8 WHERE a IS DISTINCT FROM 'NaN';
-- The following result is returned:
 a
---
(0 rows)
--------------------------------------------------------
--Hologres behavior:
CREATE TABLE test_f8 (a float8);
INSERT INTO test_f8 VALUES ('NaN');
SELECT * FROM test_f8 WHERE a IS DISTINCT FROM 'NaN';
-- The following result is returned:
  a  
-----
 NaN

To use an index, PostgreSQL defines comparison rules that treat NaN values as equal to each other and greater than any non-NaN value. However, Hologres follows the C++ standard comparison rules, where NaN values are not equal to each other. This discrepancy causes the results to be inconsistent with PostgreSQL.

Affected versions:

V2.1.37 and earlier.

Fixed versions:

  • V2.1.38 and later.

  • V2.2.10 and later.

Upgrade to the latest version.

May 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Using Fixed Plan for a point query with multiple identical primary key conditions, such as select * from table_name where (pk=1) or (pk=1);, returns duplicate results.

Fixed Plan failed to deduplicate multiple filter conditions for the same primary key.

Affected versions:

V2.2.8 and earlier.

Fixed versions:

V2.2.9 and later.

  • Do not include multiple filter conditions for the same primary key (pk) in the WHERE clause of a single SQL statement.

  • Upgrade to the latest version.

P1

Performing a schema change during a rebalance can prevent the instance from processing writes and queries.

A rebalance triggers a switch between a shard's leader and follower if the replication delay is less than 10 seconds. If a user performs a schema change during this switch, the storage engine can enter an abnormal state. This prevents the instance from processing write and query operations. In Hologres V2.1, this issue is more likely because the system automatically triggers a rebalance when an instance has an empty worker node.

Affected versions:

  • V2.1.16 to V2.1.23

  • V2.0.0 to V2.0.41

Fixed versions:

  • V2.1.24 and later

  • V2.0.42 and later

Upgrade to the latest version.

P2

After you upgrade a Hologres instance to V2.1.25 or later, the system fails to automatically clean up temporary tables generated by an insert overwrite statement for tables in non-public schemas.

A detection oversight during the execution of an insert overwrite statement prevented the proper cleanup of temporary tables.

Affected versions:

V2.1.25 to V2.1.32.

Fixed versions:

V2.1.33 and later.

  • Use the table management feature in HoloWeb to clean up temporary tables with one click.

  • Upgrade to the latest version.

P2

When you use FixedFE (which corresponds to the jdbc_fixed mode in a connector) to write data to Hologres, FixedFE reports a permission denied for schema XXX error even though the SLPM model is enabled and the user has developer permission for the specified schema.

FixedFE failed to promptly refresh its cache when permissions changed in the SLPM model. As a result, FixedFE reported the error even though the user already had the required permissions.

Affected versions:

V2.0.31 and earlier

Fixed versions:

V2.0.32 and later.

Upgrade to the latest version.

April 2024

Level

Description

Cause

Versions

Workaround

P2

When you use the datediff function to calculate the difference between two time values in a specified unit, the returned result is occasionally off by one.

The function contains a logic bug.

Affected version:

V2.0.31.

Fixed versions:

V2.1.27 and later.

Upgrade to the latest version.

P2

After a Hologres instance is upgraded to V2.1.26, the query memory usage metric shows a slow and continuous increase.

After the upgrade to V2.1.26, when a query encounters an OOM error, its memory usage is counted multiple times. This causes the corresponding monitoring metric to appear inflated.

Note

The actual memory usage of the instance does not increase. The issue is caused by a miscalculation in the monitoring statistics.

Affected version:

V2.1.26.

Fixed versions:

V2.1.27 and later.

Upgrade to the latest version.

P1

After a Hologres instance is upgraded to V2.1, querying a MaxCompute foreign table may cause a gradual increase in memory usage, fluctuations in query performance, or an increase in OOM errors.

When you query a MaxCompute foreign table on a V2.1 instance, the system does not close open files promptly. This leads to a gradual increase in memory usage, which in turn affects query performance and instance stability.

Affected versions:

V2.1.1 to V2.1.25.

Fixed versions:

V2.1.26 and later.

Upgrade to the latest version.

P2

In V2.1, the storage usage of primary-secondary and virtual warehouse instances increases, where the total usage from monitoring metrics exceeds the value calculated by the pg_relation_size function.

The system does not promptly reclaim old files from V2.1 primary-secondary or virtual warehouse instances. This leads to storage growth and inflates the monitored storage amount.

Affected versions:

V2.1.1 to V2.1.25.

Fixed versions:

V2.1.26 and later.

Upgrade to the latest version.

P1

When a Flink job consumes the Hologres binary log in JDBC mode, the consumption rate is high at startup but then continuously decreases over time.

A memory leak occurs when a Flink job consumes the Hologres binary log in JDBC mode.

Affected versions:

VVR versions earlier than V6.0.7.

Fixed versions:

VVR V6.0.7 and later.

Upgrade to the latest version.

March 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P0

Query resources are not released, which leads to the following issues:

  • Continuous memory increase.

  • A large number of held locks.

  • Numerous queries get stuck because they cannot allocate resources. Even after restarting the instance, the issue persists, and queries quickly become stuck again.

When a query involves only shard data and uses PQE or SQE to query a MaxCompute foreign table or a data lake foreign table, the system does not automatically release resources after the query completes. Only the garbage collection mechanism of the Query Master can reclaim these resources. When the Query Master is under heavy load, delayed exits cause query operations to hold excessive resources, blocking subsequent queries.

Affected versions:

V2.1.23 to V2.1.24.

Fixed versions:

V2.1.25 and later.

Upgrade to the latest version.

P1

Adding a bitmap to a dictionary-encoded, not-null column returns incorrect results, including null values.

When building a bitmap for a dictionary-encoded column, the backend fails to apply the bitmap to all data, which causes incorrect results.

Affected versions:

V2.1.21 and earlier.

Fixed versions:

V2.1.22 and later.

Upgrade to the latest version.

P1

Using Fixed Plan for real-time data writes or point queries causes the instance's memory usage to gradually increase.

In Hologres V2.1, the Fixed Plan execution engine was refactored. The operators it creates for read-write tables are not cleaned up promptly, which causes a memory leak.

Affected versions:

V2.1.1 to V2.1.9.

Fixed versions:

V2.1.10 and later.

Upgrade to the latest version.

P1

Canceling a query running on PQE may trigger a process deadlock on the corresponding PQE node, preventing it from handling new PQE requests.

Receiving a cancel signal can trigger a defect in the PQE I/O concurrency control feature. This issue affects all PQE processes.

Affected versions:

  • V2.1.2 to V2.1.8.

  • V2.0.23 to V2.0.30.

Fixed versions:

  • V2.1.9 and later.

  • V2.0.31 and later.

Upgrade to the latest version.

P2

The INTERSECT or EXCEPT function returns incorrect results when shard pruning is active. For example, when shard pruning is active, running the following example SQL may return an incorrect result.

SELECT * FROM (
	SELECT user_id FROM dc_ads_public_label_r where label_id = 1 and user_id = 1) 
a INTERSECT (
	SELECT user_id FROM dc_ads_public_label_r where label_id = 1 and user_id = 1);
  
--Incorrect result
user_id   
-------
 2
 
--Correct result
user_id   
-------
 1

The INTERSECT or EXCEPT function is currently implemented using JOIN. During shard pruning, the handling of these functions can generate an incorrect execution plan, resulting in incorrect query results.

Affected versions:

V2.1.21 and earlier.

Fixed versions:

V2.1.22 and later.

Upgrade to the latest version.

P2

When a PQE process exits, it may hang. This can accumulate over time and prevent PQE from handling new requests.

When a PQE process exits, a concurrency issue between the RPC exit thread and the main thread prevents the RPC exit thread from completing. This in turn prevents the PQE process from exiting cleanly.

Affected versions:

V2.1.0 to V2.1.14.

Fixed versions:

V2.1.15 and later.

Upgrade to the latest version.

P2

When concurrent queries are run on PQE, the instance may briefly restart.

In Hologres V2.0 and earlier versions, PQE has a multi-threaded concurrency issue that can cause a core dump in the instance.

Affected versions:

V2.0 and earlier.

Fixed versions:

V2.1.0 and later.

Upgrade to the latest version.

P2

When an SQL statement containing in ($1....) is executed in prepared statement mode and processed by the shard selector, the instance may briefly restart.

The optimizer generates an incorrect execution plan, which can cause a core dump in the instance.

Affected versions:

V2.0 and earlier.

Fixed versions:

V2.1.0 and later.

Upgrade to the latest version.

February 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Converting a TEXT type to a BIT type and then to a BIGINT type fails with the error: Cast FROM STRING to BINARY is not supported.. Example SQL:

CREATE TABLE ttttt (a text);
INSERT INTO ttttt VALUES ('x165a7b4a00001');

SELECT * FROM ttttt;
SELECT a::bit(52)::bigint FROM ttttt; 


--text to bit conversion fails with: Cast FROM STRING to BINARY is not supported.
--text to bit, then to bigint fails with: ERROR: syntax error at or near ")"

Incomplete support for converting the TEXT type to the BIT type causes the error: Cast FROM STRING to BINARY is not supported.. Subsequently, when converting to the BIGINT type, the system incorrectly identifies the BIT type, resulting in the error: syntax error at or near ")".

Affected versions:

V2.1.20 and earlier

Fixed versions:

V2.1.21 and later

Upgrade to the latest version.

P2

Setting the clustering key of a row-oriented table with a primary key to an empty string causes a metadata inconsistency and makes queries hang. Example table creation SQL:

BEGIN;
DROP TABLE IF EXISTS public.t01;
CREATE TABLE public.t01 (
  agree_time timestamp without time zone,
  seller_id int NOT NULL,
  seller_nick text NOT NULL,
  ref_id bigint NOT NULL,
  scope text NOT NULL,
  status integer NOT NULL,
  PRIMARY KEY (seller_id)
);
CALL set_table_property('public.t01', 'orientation', 'row');
CALL set_table_property('public.t01',  'clustering_key', '');
END;

If a row-oriented table's clustering key is an empty string and differs from its primary key, the FE node fails to respond to requests. This results in a metadata inconsistency and causes queries to hang.

Affected versions:

V2.1.20 and earlier

Fixed versions:

V2.1.21 and later

  • Recreate the table and explicitly specify the clustering key. For optimal performance, we recommend that the clustering key and primary key of a row-oriented table match.

  • Upgrade to the latest version.

P2

A query returns an incorrect result if its filter condition (WHERE clause) contains the clustering key and ORDER BY is also used to sort by that key. An example is a query like WHERE a >= xxx LIMIT x ORDER BY a, where the a column is the clustering key. Example SQL:

BEGIN;
CREATE TABLE test3(a int NOT NULL);

CALL set_table_property('test3', 'clustering_key', 'a');
CALL set_table_property('test3', 'segment_key', 'a');
CALL set_table_property('test3', 'distribution_key', 'a');
END;
INSERT INTO test3 SELECT i FROM generate_series(0, 100000)i;
INSERT INTO test3 SELECT 500 FROM generate_series(0, 100000)i;

SELECT count(1) FROM (SELECT * FROM test3 WHERE a>=500  AND a <= 500 ORDER BY a ASC LIMIT 20 OFFSET 11440)a;
--An unexpected result is returned. The `LIMIT` is 20, but the query might return 30 rows.

When a filter condition contains a clustering key and ORDER BY is used to sort by that clustering key, the algorithm for the ORDER BY clause is matched incorrectly, which causes the returned results and the LIMIT results to be incorrect.

Affected versions:

V2.1.19 and earlier

Fixed versions:

V2.1.20 and later

Upgrade to the latest version.

P1

In Hologres V2.1, instance memory usage slowly increases, and queries on MaxCompute foreign tables occasionally fail with an ERPC_ERROR_CONNECTION_CLOSED error.

After an instance is upgraded to V2.1, it fails to promptly close the underlying data files of foreign tables. This causes a memory leak and occasionally triggers an instance restart.

Affected versions:

V2.1.10 to V2.1.18

Fixed versions:

V2.1.19 and later

Upgrade to the latest version.

P2

Multiplying DECIMAL type values produces a result with incorrect precision. Example SQL:

CREATE TABLE t (a decimal(30,10), b decimal(30,10));
INSERT INTO t VALUES (1.1111111111, 1.0000000000),(1.1111111112, 1.0000000000),(1.1111111111, 2.0000000000),(1.1111111112, 2.0000000000);
SELECT a*b FROM t;

--Hologres result, incorrect
2.222222222000000000
1.111111111000000000
1.111111111000000000
2.222222222000000000

--PostgreSQL result, correct
1.111111111100000000
1.111111111200000000
2.222222222200000000
2.222222222400000000

The default decimal precision for DECIMAL type multiplication is 18. If the multiplication of two DECIMAL types produces a result with more than 18 decimal places, the system truncates the data before calculation, leading to an incorrect result.

Affected versions:

V2.1.18 and earlier

Fixed versions:

V2.1.19 and later

  • Convert (CAST) the DECIMAL type values to the TEXT type.

  • Upgrade to the latest version.

January 2024

Level

Description

Cause

Affected and fixed versions

Workaround

P2

After upgrading to Hologres V2.1, executing an INSERT operation following a truncate operation occasionally results in an Invalid table id in schema error.

In Hologres V2.1, the FrontEnd component incorrectly set an excessively long replay cache time. This slowed DDL replay for DML operations following a DDL operation.

Affected versions:

V2.1.1 to V2.1.14.

Fixed versions:

V2.1.15 and later.

Upgrade to the latest version.

P2

The jsonb_to_textarray function does not support constant folding, causing SQL statements that involve constant calculations to fail with an ERROR: internal error: The left deepest leaf node of columnar access ref error. Example:

CREATE TABLE t2 (f1 text[]);
INSERT INTO t2 VALUES (ARRAY['1']);
SELECT f1 && jsonb_to_textarray('["1","2"]') FROM t2;

--Error
ERROR:  internal error: The left deepest leaf node of columnar access ref

An incorrect pushdown occurs when the jsonb_to_textarray function is used with a constant in an SQL statement, which results in an error.

Affected versions:

  • V2.1.1 to V2.1.14.

  • V2.0.34 and earlier.

Fixed versions:

  • V2.1.15 and later.

  • V2.0.35 and later.

Upgrade to the latest version.

P2

Using the regexp_split_to_array function occasionally causes an ERROR: Illegal udf8 string in xxxx error.

The regexp_split_to_array function reads beyond its memory bounds, which causes the query to fail.

Affected versions:

V2.1.1 to V2.1.12.

Fixed versions:

V2.1.13 and later.

Upgrade to the latest version.

P2

Queries using SELECT * FROM <table_name> LIMIT xxx; can occasionally hang.

Hologres uses lazy loading for a full table scan with a LIMIT clause. The query hangs because the scan reads too much data at once.

Affected versions:

  • V2.1.1 to V2.1.11.

  • V2.0.33 and earlier.

Fixed versions:

  • V2.1.12 and later.

  • V2.0.34 and later.

Upgrade to the latest version.

P2

After an instance restart, upgrade, or scaling, MaxCompute tasks that directly read from Hologres foreign tables can occasionally hang.

After an instance restart, the system refreshes the table metadata. The task hangs because MaxCompute fails to retrieve the updated metadata status in time during a direct read.

Affected versions:

  • V2.1.0 to V2.1.2.

  • V2.0.5 and earlier.

Fixed versions:

  • V2.1.3 and later.

  • V2.0.26 and later.

Upgrade to the latest version.

2023 defects

December 2023

Level

Description

Cause

Affected/fixed versions

Workaround

P1

After you modify the number of shard replicas for an instance, the instance briefly restarts. Sample SQL:

--The instance briefly restarts.
CALL HG_CREATE_TABLE_GROUP ('tg', 1);
CALL HG_UPDATE_DATABASE_PROPERTY ('default_table_group', 'tg');
CALL hg_set_table_group_property ('tg', 'replica_count', '2'); 

When you modify the number of shard replicas, the metadata does not update correctly, causing the instance to restart.

Affected versions:

  • V2.1.1 to V2.1.10

  • V2.0.33 and earlier

Fixed versions:

  • V2.1.11 and later

  • V2.0.34

Upgrade to the latest version.

P2

If a data import using the hg_insert_overwrite stored procedure fails, the procedure does not clean up the temporary table it created.

The hg_insert_overwrite stored procedure creates a temporary table during execution but lacks a cleanup mechanism, causing the table to remain if the task fails.

Affected versions:

V2.0.19 and earlier

Fixed versions:

V2.0.30 and later

  • Manually delete the temporary table.

  • Upgrade to the latest version.

P2

Using a fixed plan to write data to a DECIMAL column in Hologres can result in incorrect data. This issue occurs if the input value is a negative number and the difference between its least significant decimal place and the destination column's scale is 19 or more. Sample SQL:

CREATE TABLE fixed_plan_decimal (col decimal(38,19));

-- A write error is triggered because the input value is negative and the difference between its least significant decimal place and the destination column's scale is 19.
INSERT INTO fixed_plan_decimal VALUES (-1.000000000);

-- The written result is 7922816250.4264337593543950336.
SELECT * FROM fixed_plan_decimal;
 

This issue occurs because the fixed plan path incorrectly handles the precision of the DECIMAL type, resulting in data errors.

Affected versions:

V2.1.11 and earlier

Fixed versions:

V2.1.12 and later

Note

After the fix, the behavior of the fixed plan path matches the non-fixed plan path.

  • When writing data, explicitly cast the input value to the correct DECIMAL type, for example: -1.000000000::decimal(38,19).

  • Upgrade to the latest version.

P1

For instances with binlog enabled, CPU utilization increases significantly after an upgrade to V2.1.9.

After an instance with binlog enabled is upgraded to V2.1.9, binlog may fail to catch errors correctly in certain scenarios. This failure prevents the process from exiting normally after an error occurs, resulting in excessive logging and increased CPU utilization.

Affected versions:

V2.1.1 to V2.1.9

Fixed versions:

V2.1.10 and later

Upgrade to the latest version.

November 2023

Level

Description

Cause

Versions

Recommendations

P1

The var_samp function returns an incorrect variance when the input data type is DECIMAL. Sample SQL:

CREATE TABLE t1(f1 decimal(38,18));
INSERT INTO t1 VALUES (123),(234),(456);

-- The result for the DECIMAL type is incorrect.
SELECT var_samp(f1) FROM t1;
-- The following result is returned:
var_samp   
--------------
 0.2382402695

-- The result is correct after the type is converted to INT.
SELECT var_samp(f1::int) FROM t1;
-- The following result is returned:
var_samp     
------------------
 28749.0000000000
 

A type conversion error occurs in the var_samp function when processing DECIMAL data.

Affected:

V2.0.27 and earlier.

Fixed:

V2.0.28 and later.

Upgrade to the latest version.

October 2023

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Using the date_part function with an uppercase field causes the error error: unsupport extract type xxx.

SELECT date_part('HOUR',ts) FROM tt;
--error:unsupport extract type [HOUR]

The query failed because the optimizer did not correctly recognize the uppercase field in the date_part function.

Affected versions:

V2.0.1 to V2.0.25

Fixed version:

V2.0.26 and later

Upgrade to the latest version.

P2

Using the && operator to concatenate arrays returns the error: Unexpected expr type in array expr:145.

CREATE TABLE test (
  channel_info text
);
SELECT regexp_split_to_array(LOWER('TMK'),',') && array[(regexp_split_to_array(LOWER(channel_info),'-'))[2]]  FROM test;

--error:Unexpected expr type in array expr:145

The execution engine for the && operator is the Hologres Query Engine (HQE). When the && operator is used with an Array, the optimizer incorrectly handles the Array. This leads to an incorrect execution plan and causes the query to return an error.

Affected versions:

V2.0.25 and earlier

Fixed version:

V2.0.26 and later

Upgrade to the latest version.

P2

For a partitioned table, a with statement that selects zero partitions returns incorrect column aliases.

CREATE TABLE t0_parent(ds text, v1 bigint, v2 bigint, v3 bigint) PARTITION BY list (ds);
CREATE TABLE t0_child1 PARTITION OF t0_parent FOR VALUES IN ('20230915');
CREATE TABLE t0_child2 PARTITION OF t0_parent FOR VALUES IN ('20230916');

--Query statement that selects 0 partitions
WITH cte1 AS (
  SELECT v1, v2, v3 FROM t0_parent
),
    cte2 AS (
      SELECT v1, v2 FROM cte1 WHERE v3 = 1 AND v3 = 2
    )
    SELECT v2 AS vb, v1 AS va FROM cte2 limit 1;

--Incorrect result with the wrong alias 
 v2 | v1 
----+----

--Correct result with the right alias
vb | va 
----+----

For a query with a with cte clause on a partitioned table, if the query selects zero partitions, the query optimizer (QO) incorrectly prunes partition nodes while generating the execution plan. This causes the column aliases to be lost in the result set.

Affected versions:

V2.0.25 and earlier

Fixed version:

V2.0.26 and later

Upgrade to the latest version.

P2

If a case when statement uses the DECIMAL type and the case when statement also contains a function that is processed by the PQE, an error occurs:

error: column with id 0 has type decimal(38, 10) but ReadColumn returns array Array(type=decimal(20, 4) length=1 null_count=0 [1.0000]).

If a case when statement contains both a DECIMAL type and a function executed by the Parallel Query Engine (PQE), the system fails to correctly convert the DECIMAL type's precision. The resulting mismatch causes the query to fail.

Affected versions:

V2.0.23 and earlier

Fixed version:

V2.0.24 and later

Upgrade to the latest version.

P2

Inserting data into a child table fails with the error Can't find parent table for table name if its parent table is in a different schema.

CREATE schema haha;
CREATE TABLE haha.p(
  a text not null, 
  b int not null
) PARTITION BY LIST(a);
CREATE TABLE public.c1 PARTITION OF haha.p FOR VALUES IN('v1');

insert into public.c1 SELECT 'v1', generate_series(0,100);
--error:Can't find parent table for table name

Although Hologres supports parent and child tables in different schemas, the system failed to identify this relationship during an INSERT operation, causing the insert to fail.

Affected versions:

V2.0.23 and earlier

Fixed version:

V2.0.24 and later

Upgrade to the latest version.

P2

A bulk load import using insert on conflict do update could create duplicate primary keys on a row-oriented table. This issue occurred if the table's clustering key and primary key (PK) were different and no time-to-live (TTL) was explicitly set.

--Create table statement
BEGIN ;
CREATE TABLE test (
  id integer,
  phone_number text,
  create_time text
  ,PRIMARY KEY (id)
);
CALL set_table_property('test', 'orientation', 'row');
CALL set_table_property('test', 'storage_format', 'sst');
CALL set_table_property('test', 'clustering_key', 'create_time:asc');
CALL set_table_property('test', 'distribution_key', 'id');
CALL set_table_property('test', 'time_to_live_in_seconds', '3153600000');
COMMIT ;


--Duplicate primary keys appear during query
SELECT * FROM test;
id | phone_number |create_time
---|--------------|-----------
1  | 134xxxx      | 2023-11-06 19:25:42.483287+08
1  | 134xxxx      | 2023-11-06 19:25:42.483287+08

On a row-oriented table, insert on conflict do update marks a record for deletion and then inserts a new one. If the primary key (PK) and clustering key were different, compaction did not correctly process the file marked for deletion, resulting in duplicate primary keys.

Affected versions:

V2.0.22 and earlier

Fixed version:

V2.0.23 and later

  • Set the primary key (PK) and clustering key of the row-oriented table to be the same, or convert the table to a column-oriented table.

  • Upgrade to the latest version.

P2

A query that performs a group by on a column from an array_to_string(array_sort(...)) expression and also includes multiple count(distinct ...) aggregations fails with the error: ORCA failed to produce a plan : No plan has been computed for required properties.

create table t1 (f1 int , f2 int , f3 int , f4 text[]);

SELECT 
f1,f5,
count(distinct f2),
count(distinct f3)
FROM 
(
  SELECT f1,f2,f3,array_to_string(array_sort(f4),',')as f5 FROM t1
)tt
group by f1,f5;

count(distinct ...) generates a common table expression (CTE), but the array_sort function does not support CTE inlining. This incompatibility prevents the optimizer from creating a valid execution plan, which causes the query to fail.

Affected versions:

V2.0.22 and earlier

Fixed version:

V2.0.23 and later

Upgrade to the latest version.

P2

Some queries hang after you execute the drop server command.

Executing the drop server command caused the replay operation among FE nodes to fail. The resulting version mismatches between nodes led to hanging queries.

Affected versions:

V1.3.40 to V1.3.51

Fixed version:

V1.3.52 and later

Upgrade to the latest version.

September 2023

Level

Description

Cause

Versions

Workaround

P2

When using a Proxima vector index, inserting a null vector without using a fixed plan results in a write error: internal error: check condition "and_handle_null" assert failed. The following is an example SQL:

BEGIN;
CREATE TABLE t (
  vector float4[] CHECK (array_ndims(vector) = 1 AND array_length(vector, 1) = 3)
);
CALL SET_TABLE_PROPERTY ('t', 'proxima_vectors', '{"vector":{"algorithm":"Graph","distance_method":"SquaredEuclidean"}}');
END;

set hg_experimental_enable_fixed_dispatcher = off;

-- Insert a null vector
INSERT INTO t values (null);
-- ERROR:  internal error: check condition "and_handle_null" assert failed.

In non-fixed plan mode, writing a null vector value causes an assertion failure during the CHECK (array_ndims(vector) operation.

Affected versions:

V2.0.21 and earlier

Fixed versions:

V2.0.22 and later

Upgrade to the latest version.

P1

After enabling storage encryption for a MaxCompute project, querying MaxCompute data from a Hologres foreign table intermittently fails with one of the following errors: query next FROM foreign table executor failed, Channel is empty, or internal error: Connect timeout.

In Hologres V2.0.15, a fix for an issue with key transfers during MaxCompute data decryption introduced a multi-threaded memory corruption bug. When a MaxCompute foreign table undergoes schema evolution, this bug can cause the SQE component to coredump and restart, leading to intermittent errors when the application accesses the foreign table.

Affected versions:

V2.0.15 to V2.0.20

V1.3.61 to V1.3.62

Fixed versions:

V2.0.21 and later

Upgrade to the latest version.

P2

Using the string_agg function on a field with a not null constraint causes an error: Column column0 should be non-nullable but the values contain 1 nulls. The following is an example SQL:

create table test(id int not null, msg text not null);    insert into test values (1, 'b');SELECT count(distinct id), string_agg(distinct id::text) FROM test where msg = 'a';

The output of string_agg can be null, but the query optimizer (QO) infers whether the result is null based on the properties of the fields it processes. When a field is not null, the QO infers that the result of string_agg cannot be null, leading to an incorrect result and causing an error message.

Affected versions:

V2.0.20 and earlier

Fixed versions:

V2.0.21 and later

Upgrade to the latest version.

P2

For instances with a large number of table groups and a high shard count (over 100), shards can become unevenly distributed after a worker failure. The distribution remains uneven even after running the rebalance command.

When an instance has many table groups and a high shard count (over 100), the rebalance command inaccurately reallocates shards, failing to correct the uneven distribution.

Affected versions:

V2.0.20 and earlier

Fixed versions:

V2.0.21 and later

Upgrade to the latest version.

P2

Using the substring function on a table field containing 4-byte UTF-8 data produces an incorrect result. However, applying the substring function to the same 4-byte UTF-8 data independently works correctly. The following is an example SQL:

-- Returns 3, which is correct.
SELECT length(substring (E'\U0001F345' || '23456789', 1, 3));

-- Using substring on table data returns an incorrect result.
create table t (emoji text);
insert into t values (E'\U0001F345' || '23456789');

-- Returns 1, which is incorrect. The expected result is 3.
SELECT length(substring(emoji, 1, 3)) FROM t;

The current implementation of the substring function only supports UTF-8 characters up to 3 bytes long. As a result, using substring on table data containing 4-byte characters returns an incorrect result.

Affected versions:

V2.0.19 and earlier

Fixed versions:

V2.0.20 and later

Upgrade to the latest version.

P2

CPU consumption increases significantly after enabling Binlog consumption.

Improper default system parameter settings cause high-frequency system logging during Binlog consumption, increasing CPU usage.

Affected versions:

V2.0.17 to V2.0.19

Fixed versions:

V2.0.20 and later

Upgrade to the latest version.

P2

The string_agg or array_agg function returns an incorrect result when an aggregate filter is used. The following is an example SQL:

  • DDL and data import:

    create table test(x text, y int);insert into test values(null, 1), (null, 2),(null, 1), (null, 2);
  • Query 1:

    SELECT array_agg(x) filter (where x is not null) FROM test group by y;
    -- Expected result: [null],[null]
    -- Actual (incorrect) result: {null},{null}
  • Query 2:

    SELECT array_agg(x) filter (where x is  null) FROM test group by y;
    -- Expected result: {null,null},{null,null}
    -- Actual (incorrect) result: {null,null},{null}

When an aggregate filter was used with string_agg or array_agg, the filter was not processed correctly, leading to incorrect or unstable results.

Affected versions:

V2.0.18 and earlier

Fixed versions:

V2.0.19 and later

Upgrade to the latest version.

P2

When an array_agg filter operation on a field with the not null property produces a result containing null, the instance briefly restarts. The following is an example SQL:

create table bbb(x int not null, y int);insert into bbb values (1, 1);SELECT array_agg(x) filter (where x > 1) FROM bbb group by y;

When using array_agg filter on a not null field, the query optimizer (QO) incorrectly inferred that the result must also be not null. If the actual result contained a null value, this conflict caused the instance to coredump.

Affected versions:

V2.0.18 and earlier

Fixed versions:

V2.0.19 and later

Upgrade to the latest version.

P1

When using Proxima, setting the min_flush_proxima_row_count parameter to 0 causes the instance to restart.

For the Hologres storage engine (SE), the value of the min_flush_proxima_row_count parameter must be greater than 0. If you set min_flush_proxima_row_count to 0, the SE check fails, which causes the instance to restart.

Affected versions:

V2.0.18 and earlier

Fixed versions:

V2.0.19 and later

Upgrade to the latest version.

P2

After enabling automatic partition creation, if you move a table to another schema and then create a new table with the same name in the original schema, an error occurs: ERROR: auto_partitioning.time_unit could only be specified once. The following is an example SQL:

-- Enable automatic partitioning
begin;
CREATE TABLE ads.test (
  olap_date integer NOT NULL default 0,
  pk text NOT NULL default ''::text,
  sid text  ,
PRIMARY KEY (olap_date, pk))
  PARTITION BY LIST (olap_date);
CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
commit;

-- Change the schema of the table
alter table test set schema to public;

-- Recreate the table with the same name
begin;
CREATE TABLE ads.test (
  olap_date integer NOT NULL default 0,
  pk text NOT NULL default ''::text,
  sid text  ,
PRIMARY KEY (olap_date, pk))
  PARTITION BY LIST (olap_date);
CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
commit;

ERROR: auto_partitioning.time_unit could only be specified once

After enabling automatic partition creation, when a table's schema is changed, its automatic partitioning configuration does not move with it. This causes a configuration conflict and an error if a new table with the same name is created in the original schema.

Affected versions:

V2.0.18 and earlier

Fixed versions:

V2.0.19 and later

Upgrade to the latest version.

August 2023

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Using the Concat function with a single-column argument causes an error: Function concat node must have at least 2 arguments but it only has 1. For example:

create table aaa(x text);insert into aaa values ('11111111');SELECT concat(x) FROM aaa;HGERR_msge internal error: Function concat node must have at least 2 arguments but it only has 1

Earlier versions do not support using the Concat function with a single-column argument.

Affected versions:

V2.0.17 and earlier.

Fixed versions:

V2.0.18 and later.

Upgrade to the latest version.

P1

After cold storage is enabled for a partitioned table, performing an alter schema operation, such as add column, on the parent partition table may cause the conversion of child partition tables to cold storage to behave unexpectedly. The specific issues may include the following:

  • The status of transferring some child partition tables to cold storage remains transferring.

  • Child tables that are expected to be converted to cold storage are not converted. For example, if you set a policy to convert child tables older than 10 days to cold storage, some of these tables might remain in hot storage.

  • Child tables already in cold storage are incorrectly reported as being in hot storage.

For partitioned tables with cold storage enabled, if you run the alter schema command on the parent table, the operation also applies to the child tables. This causes the storage properties of the child partition tables to become inconsistent between the FE node and the metadata manager (SM). The child tables are marked for cold storage in the FE node but have a different storage mode in the SM. As a result, the cold storage actions for the child tables do not work as expected. You can use the following SQL statement to retrieve the cold storage tables that are not behaving as expected:

SELECT db_name, schema_name, table_name FROM hologres.hg_table_info where collect_time::date = date '20230901' and table_meta::json#>>'{table_storage_mode}' = 'cold' and hot_storage_size > 0 order by table_name;

Affected versions:

V2.0.17 and earlier.

Fixed versions:

V2.0.18 and later.

  • Modify the storage property of the affected child tables within a single transaction. For example:

    begin;call set_table_property('schema.<cold_child_table_name>', 'storage_mode', 'hot');call set_table_property('schema.<cold_child_table_name>', 'storage_mode', 'cold');commit;
  • Upgrade to the latest version.

    Note

    After upgrading, you must manually correct the storage properties for child tables affected before the upgrade.

P2

A read-only secondary instance cannot consume Hologres Binlog.

A change in a default property of the read-only secondary instance causes this issue.

Affected versions:

Early versions of V1.3 and V2.0.

Fixed versions:

V1.3.61 and later; V2.0.17 and later.

Use the primary instance to consume Hologres Binlog, or upgrade to a fixed version.

P2

When a column is compared with constants of different types by using or, such as col::type = const1::type1 or col::type = const2::type2, the query may return an empty result set or unexpected results. The sample SQL is as follows:

create table t (a date, b timestamp, c text, d int);-- Column 'a' is a DATE type, but is implicitly cast to a TIMESTAMP type after the OR, leading to unexpected results.SELECT * FROM t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = timestamp '2023-06-14';-- The data types on either side of the OR operator are inconsistent.SELECT * FROM t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = '2023-06-14';

If the data types of fields connected by or are inconsistent, the query optimizer (QO) does not align the types when generating an execution plan, causing the final output to differ from the expected result.

Affected versions:

V1.3.59 and earlier;

V2.0.14 and earlier.

Fixed versions:

V1.3.60 and later; V2.0.15 and later.

Upgrade to the latest version.

P2

In a primary-secondary instance, executing HG_MOVE_TABLE_TO_TABLE_GROUP or setting a table to readonly might cause the secondary instance to become unavailable.

Because the Lazy Open mechanism is enabled on the secondary instance, after you perform resharding on the primary instance or manually set readonly to true and then write data again, the shard status of the primary and secondary instances becomes inconsistent, which causes the secondary instance to become unavailable.

Affected versions:

V1.3.42 to V2.0.16.

Fixed versions:

V2.0.17 and later.

  • To perform a resharding operation or set a table to read-only, first disable the Lazy Open mechanism on the secondary instance by running these commands:

    SELECT hg_admin_command('set_global_flag', 'enable_dynamic_close_tablet=false');    SELECT hg_admin_command('set_global_flag', 'enable_lazy_open_tablet=false');

    After applying these settings, restart the instance. This new configuration may slightly increase memory usage.

July 2023

Level

Description

Cause

Affected and fixed versions

Workaround

P1

Queries that use the PQE engine fail with the following error:

ERROR: status { code: SERVER_INTERNAL_ERROR message: "query next FROM pg executor failed FROM xxx: ERPC_ERROR_CONNECTION_CLOSED, reason: Drain packet failed, peer address:xxx" }

An intermittent bug in the PQE process caused process leaks when processing SQL requests. When the number of leaked processes reached the 512 limit, the instance could no longer process new queries.

Affected:

V2.0.1 to V2.0.11.

Fixed:

V2.0.12 and later.

Upgrade to the latest version.

P2

A shared cluster fails to read encrypted data from ODPS and reports the following error:

error query next FROM foreign table executor failed, pangu://xxxx validate userinfo fail xxxx.

Shared clusters do not support encrypted data.

Affected:

V2.0.15 and earlier.

Fixed:

V2.0.16 and later.

Upgrade to the latest version.

P2

A backup and recovery operation fails if the source instance contains a cold storage table with frequent write operations.

Frequent writes to a cold storage table trigger continuous data compaction. Because the non-disruptive backup method requires shard versions to align, this continuous compaction prevents the backup process from capturing the latest shard state and causes the backup to fail.

Affected:

V2.0.15 and earlier.

Fixed:

V2.0.16 and later.

  • Convert the cold storage table with frequent writes to a hot storage table before backing up. For more information, see data tiered storage.

  • Upgrade to the latest version.

P2

An instance briefly restarts after a PQE SQL query is manually canceled or times out.

PQE SQL queries are resource-intensive. A manually canceled or timed-out query could fail to terminate properly, causing a null pointer error and an instance coredump.

Affected:

V2.0.12 to V2.0.14.

Fixed:

V2.0.15 and later.

Upgrade to the latest version.

P2

A case when query that contains an array[] type returns an error message:

Filter has x rows but length of columns is y.

When the case when statement handles a field of the array[] type, some data within the array[] is lost, which causes a query error.

Affected:

V2.0.10 and earlier.

Fixed:

V2.0.11 and later.

Upgrade to the latest version.

P2

After you perform a DROP operation on a table with binary logging enabled and restart the instance, the instance storage does not decrease, and the storage usage reported by monitoring is greater than the result of the pg_database_size query.

After a table with binlog enabled is DROPped, an instance restart causes the directory for the table's binlog to not be deleted properly, which prevents storage usage from decreasing.

Affected:

V2.0.12 and earlier.

Fixed:

V2.0.13 and later.

Upgrade to the latest version.

P2

Specifying an asc or desc order for a distribution key when creating a table causes query errors or brief instance restarts. Example:

BEGIN ;CREATE TABLE test(a int);CALL set_table_property('test', 'distribution_key', 'a:asc');COMMIT ;

The distribution key does not support specifying an asc or desc order. This caused the DDL statement replay on the FE to fail, resulting in a coredump or errors when querying or writing to the table.

Affected:

V1.3.55 and earlier.

Fixed:

V1.3.56 and later.

  • Do not specify an asc or desc order when you create a distribution key.

  • Upgrade to the latest version to resolve the coredump issue. After the upgrade, an invalid distribution column: xx:asc error is reported if you specify asc/desc for the distribution key when you create a table.

June 2023

Level

Description

Cause

Affected and fixed versions

Workarounds

P2

In SLPM mode, when you use the slpm_alter_view_owner function to create two views with the same name in different schemas, the function reports an error: ERROR: more than one row returned by a subquery used as an expression.

call slpm_enable();call slpm_enable_multi_schema_view();create schema test_schema;create table tb1(id int);create view public.v1 as SELECT * FROM public.tb1;create view test_schema.v1 as SELECT * FROM public.tb1;

In SLPM mode, creating a view across schemas references the pg_class system table. If views with the same name exist in different schemas, the relname column in pg_class contains duplicate values. This causes the subquery to return more than one row, which triggers an error.

Affected versions:

V2.0.3 to V2.0.9.

Fixed versions:

V2.0.10 and later.

Upgrade to the latest version.

P2

After cold storage is enabled, a read-only secondary instance briefly restarts when it accesses a cold storage table.

The read-only secondary instance lacks the environment variables required for cold storage, which causes an error when it attempts to access a cold storage table.

Affected versions:

V1.3.54 and earlier.

Fixed versions:

V1.3.55 and later.

  • Convert the cold storage table to a standard storage table.

  • Upgrade to the latest version.

P2

After you upgrade a Hologres instance to V1.3, if you create a Hologres foreign table in MaxCompute and use dual signing to access Hologres instances in the China (Shanghai) and US (Virginia) regions, queries fail with the following error:

ERROR: pooler: xxxx: authentication failed.

After the upgrade, an environment configuration error in the China (Shanghai) and US (Virginia) regions prevents MaxCompute from authenticating with Hologres using dual signing.

Affected versions:

V1.3.54 and earlier.

Fixed versions:

V1.3.55 and later.

Upgrade to the latest version.

P2

After you upgrade a Hologres instance to V1.3, running the following command in the China (Shanghai) and US (Virginia) regions shows that the maximum number of connections for a single node is not 128.

show max_connections;

After the upgrade, an environment configuration error in the China (Shanghai) and US (Virginia) regions caused the maximum number of connections for a single node to differ from the default of 128.

Affected versions:

V1.3.54 and earlier.

Fixed versions:

V1.3.55 and later.

Upgrade to the latest version.

P2

After data masking is enabled, a query that uses a common table expression (CTE) and UNION on a masked field fails with the following error:

ERROR: pooler: xxxx: remote server read/write error yy. The following is an example:

set hg_anon_enable = on;create table if not exists test_anon_cte(id text);security label for hg_anon on column test_anon_cte.id is 'hash';with tt2 as (SELECT * FROM test_anon_cte) SELECT count(1) FROM tt2 where id != 'a' group by id union all SELECT count(1) FROM tt2 where id != 'b' group by id;

After data masking is enabled, UNION ALL is not supported for masked fields. When using a CTE and UNION, the outer query encounters a null pointer. This causes the instance to coredump and the query to fail.

Affected versions:

V1.3.51 and earlier.

Fixed versions:

V1.3.52 and later.

Upgrade to the latest version to resolve the instance coredump. However, UNION remains unsupported for masked fields, and the query will fail with the error UNION is not supported on security item.

P2

After Hologres is upgraded from V1.1 to V1.3, the result of cast array to text contains an escape character (\), as shown in the following example:

create table arrary_to_text (  a text, b text, c text);insert into arrary_to_text values ('7416461', 'czzzzz', '2023-04-16 23:13:34');SELECT CAST(ARRAY_AGG(CONCAT('[','"', a,'"',',','"', b,'"',',','"', c,'"',']')) AS TEXT) AS list_vin FROM arrary_to_text limit 1;--Result in the latest V1.3 version"{"[\"7416461\",\"czzzzz\",\"2023-04-16 23:13:34\"]"}"--Result in V1.1"{"["7416461","czzzzz","2023-04-16 23:13:34"]"}"

In Hologres versions earlier than V1.3.51, support for the cast array to text conversion was incomplete and did not add the escape character (\). Starting from version V1.3.51, Hologres has improved support for cast array to text to align its behavior with the standard PostgreSQL protocol. Query results now contain the escape character (\), which was not present in older versions. Therefore, this difference in results is expected.

Affected versions:

V1.3.50 and earlier.

Fixed versions:

V1.3.51 and later.

It is expected that the result contains an additional escape character (\).

May 2023

Level

Description

Cause

Affected and fixed versions

Workaround

P2

Executing an SQL statement that contains a Nested Loop Join returns an error: Schema has 1 fields but 2 are expected. The following is a sample SQL statement:

SELECT "_"."table_name"    FROM "public"."test" "_"    where "_"."table_name" = 'hello'     and (case when lower("_"."user_id") is not null        then lower("_"."user_id")        else ''        end) = 'ssss';

The optimizer in the current version of Hologres removes the extra project, causing a column mismatch in the table and the query to fail.

Affected versions:

V1.3.45 and earlier.

Fixed versions:

V1.3.49 and later.

Upgrade to the latest version.

P2

When you convert data from the TEXT type to the JSON type, data that is not in a valid JSON format is also incorrectly converted. The following is a sample SQL statement:

create table test1(data text);insert into test1 values('{"a","b"}');SELECT data::json FROM test1;--Incorrect result: {"a","b"}

The correct result should be an error: invalid input syntax for type json" detail: "Expected \":\", but found \",\".".

During a text::json type conversion, the system processes ::json as a cast. This causes the execution engine (QE) to skip JSON data format validation and incorrectly convert the data to the JSON type.

Affected versions:

V1.3.20 to V1.3.46.

Fixed versions:

V1.3.47 and later.

Upgrade to the latest version.

P2

When the result of the to_number function (which returns a DECIMAL) is converted to a STRING for subsequent calculations, the final result is incorrect. The following is a sample SQL statement:

create table test(x text);insert into test values ('0');SELECT (to_number(x, '9') || ' days')::interval FROM test;Result:-------0.E-10 days

In Hologres, the to_number function converts 0.0000000000 to the TEXT type and then into scientific notation, which results in incorrect query results because the compute engine (QE) currently does not handle scientific notation correctly.

Affected versions:

V1.3.44 and earlier.

Fixed versions:

V1.3.46 and later.

Upgrade to the latest version.

P2

Queries on special types of tables, such as MaxCompute Cluster tables and Cfile tables, are slower than queries on standard MaxCompute tables.

In the current version, when reading data from MaxCompute Cluster or Cfile tables, the Hologres execution engine splits the small files of the foreign table into even smaller files. This increases the number of files processed in a single query and slows down query performance.

Affected versions:

V1.3.20 to V1.3.40.

Fixed versions:

V1.3.45 and later.

Upgrade to the latest version.

April 2023

Level

Description

Cause

Affected and fixed versions

Workaround

P0

An instance restarts when you modify a table schema's properties, such as TTL, Bitmap, or Dictionary. The following example modifies a table's TTL:

call set_table_property('tablename', 'time_to_live_in_seconds', '946080');

If an instance is upgraded from an earlier version, such as V1.1, historical schema metadata for some tables might be missing. The system might access this missing information after a flush or compaction operation on the table. The current version does not handle the missing schema information correctly, which triggers a core dump.

Affected versions:

V1.3.20 to V1.3.44

Fixed versions:

V1.3.45 and later

Upgrade to the latest version.

P2

The to_char(to_timestamp(hour)) function returns an incorrect result—one hour earlier than the actual time—when used with timestamptz data from before January 1, 1970. Here is a sample SQL statement:

create table t (a int);insert into t values (2);SELECT to_char(to_timestamp(a || '', 'HH24'), 'HH24:00:00') FROM t;

The result is 01:00:00, but the expected result is 02:00:00.

The execution engine incorrectly converts time precision when processing timestamps.

Affected versions:

V1.3.20 to V1.3.43

Fixed versions:

V1.3.44 and later

Upgrade to the latest version.

P2

Converting a JSONB type to a NUMERIC type without specifying a precision causes the query to fail with the following error: HGERR_msge numeric field overflow HGERR_detl A field with precision 0, scale 0 must round to an absolute value less than 1. HGERR_ctxt func_name:jsonb_numeric HGERR_end. Here is a sample SQL statement:

create table t1(f1 jsonb);insert into t1 values('1.1');SELECT f1::numeric FROM t1;

When converting a JSONB type to a NUMERIC type without a specified precision, the execution plan generated by the optimizer does not provide a default precision. When the execution engine converts NUMERIC to DECIMAL in this scenario, it defaults the precision to 0,0, which causes the query to fail.

Affected versions:

V1.3.20 to V1.3.41

Fixed versions:

V1.3.42 and later

  • Specify a precision when you convert the JSONB type to the NUMERIC type.

  • Upgrade to the latest version.

P2

Querying data from an OSS data lake fails with the following error: query next FROM foreign table executor failed, Failed to call iterateForeignScan: ArrayIndexOutOfBoundsException.

A memory leak in the Hologres data lake query engine during data reads from OSS causes the query to fail.

Affected versions:

V1.3.20 to V1.3.41

Fixed versions:

V1.3.42 and later

Upgrade to the latest version.

March 2023

Level

Description

Cause

Affected versions

Workaround

P2

When you use union all on two decimal fields with inconsistent precision, the query fails with the error: NUMERIC precision 65535 must be between 1 and 1000. The following is a sample SQL statement:

create table t1(a int ,b numeric(38,0), c bigint);create table t2(a int ,b numeric(38,0), c numeric(30,0));SELECT b / power(10, 18),c FROM t1UNION allSELECT a / power(10, a), c FROM t2

The query optimizer (QO) does not align the precision for decimal fields in a union all operation. Consequently, the query engine (QE) detects this inconsistency during execution and returns an error.

Affected versions:

V1.3.20 to V1.3.40.

Fixed in:

V1.3.41 and later.

Upgrade to the latest version.

P2

Executing the call set_table_property command on an existing partitioned parent table within the same transaction returns the error: SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table . The following is a sample SQL statement:

--If the sample partitioned parent table exists, run the following SQL statement:
BEGIN;
CREATE TABLE IF NOT EXISTS "public".test ( "parent_node_id" text, "parent_node_name" text, "is_leaf" text, "node_flag" text, "ds" text) PARTITION BY LIST(ds);
CALL SET_TABLE_PROPERTY('"public".test', 'orientation', 'row');
COMMIT;

In versions earlier than Hologres V1.3.38, if a partitioned parent table exists, using the set_table_property command to set a property to its existing value causes the system to ignore the SQL statement. In Hologres V1.3.38, the validation for set_table_property was enhanced. As a rule, you cannot modify properties such as orientation, distribution_key, and clustering_key for existing tables. Attempting to modify these properties reports an error.

Affected versions:

V1.3.38 to V1.3.40.

Fixed in:

V1.3.41 and later.

Upgrade to the latest version.

Note

After the upgrade, the behavior is consistent with versions earlier than V1.3.38. If the table exists and you set a table property to its existing value, the system ignores the SQL statement.

P2

The to_date, to_char, and to_timestamp functions fail when processing data with leading spaces, returning the error: HGERR_detl Field requires 4 characters, but only 0 could be parsed. The following is a sample SQL statement:

CREATE TABLE test2 (x text);
INSERT INTO test2 VALUES (' 2022 03');
SELECT to_date(x, 'YYYYMM')
FROM test2;

When data has leading spaces, the to_date, to_char, and to_timestamp functions handle the spaces incorrectly. This causes the data conversion to fail and the query to return an error.

Affected versions:

V1.3.20 to V1.3.40.

Fixed in:

V1.3.42 and later.

  • Modify the SQL to handle leading spaces. For example: to_char(year, 'FM9999') .

  • Upgrade to the latest version.

February 2023

Level

Description

Cause

Versions

Recommendation

P2

Using the rb_build function with a table name causes it to fail with the error: Not support calling pg udf for type (23, LIST).

CREATE TABLE rb_build_test(a int[]);INSERT INTO rb_build_test VALUES ('{1,2,3}');SELECT rb_build(a) FROM rb_build_test;--Error: HGERR_code XX000 HGERR_msge internal error: Not support calling pg udf for type (23, LIST)

Executing the rb_build function directly without a table name runs successfully. The sample SQL is as follows:

SELECT rb_build('{1,2,3}');--Result:rb_build\x3a300000010000000000020010000000010002000300                                

When the rb_build function is executed with a table name, it first performs calculations and then writes the results to the table. This function is executed in HQE, and the execution fails because the current version of HQE does not support bidirectional conversion between arrays and PQE arrays.

Affected versions:

V1.3.37 and earlier.

Fixed versions:

V1.3.38 and later.

Upgrade to the latest version.

P2

An SQL query that contains a LIMIT x OFFSET y clause where y > x returns an incorrect number of rows. For example, the following query should return two rows but returns zero:

CREATE TABLE test (id int, msg text);INSERT INTO test VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd');SELECT * FROM (SELECT * FROM test ORDER BY id LIMIT 2) x LIMIT 4 OFFSET 3;

During execution plan generation, if the OFFSET value exceeds the LIMIT value, the system pushes down the LIMIT to the operator but not the OFFSET. This causes an incorrect query result.

Affected versions:

V1.3.20 to V1.3.36.

Fixed versions:

V1.3.37 and later.

  • Modify the SQL statement to ensure the OFFSET value is less than the LIMIT value.

  • Upgrade to the latest version.

P2

The ANALYZE operation fails with the following error: ERROR: store statistic results for table `public.table_name` failed: basic_string::_M_create.

The operation fails to correctly parse table fields.

Affected versions:

V1.3.36.

Fixed versions:

V1.3.37 and later.

Upgrade to the latest version.

P2

The CREATE TABLE AS command fails with the error relation "xxx" does not exist when used for a schema other than public.

CREATE SCHEMA test_schema;SET search_path TO test_schema;CREATE TABLE test_src (a int);INSERT INTO test_src VALUES (1);CREATE TABLE AS test_src_1 SELECT * FROM test_src;--Error: relation "xxx" does not exist;

After you use the set search_path to command to specify a schema, if the table name in the create table as syntax does not have a schema prefix, the system still searches for the source table and inserts data in the public schema by default. However, an error message is reported because this table does not exist in the public schema.

Affected versions:

V1.3.20 to V1.3.36.

Fixed versions:

V1.3.37 and later.

  • In the CREATE TABLE AS statement, prefix the table name with the schema. For example:

    CREATE TABLE AS test_schema.test_src_1 SELECT * FROM test_src;
  • Upgrade to the latest version.

P2

If you set the starting value for a bigserial field outside the int4 range (–2147483648 to 2147483647), subsequently generated values for that field are incorrect.

CREATE TABLE IF NOT EXISTS test_tb(  id bigserial NOT NULL,  f1 text,  PRIMARY KEY (id,f1));--Insert data into the f1 field.INSERT INTO test_tb(f1) VALUES('1'),('2'),('3');-- Change the auto-increment starting value to 100,000,000,000.ALTER SEQUENCE public.test_tb_id_seq RESTART WITH 100000000000;-- Insert two more rows for testing.INSERT INTO test_tb(f1) VALUES('6'),('7');SELECT * FROM test_tb ORDER BY id ASC;--Result:id| f1------------+----1 | 12 | 23 | 31128270048 | 61128270049 | 7

The supported range for the starting value of a bigserial type is the int4 range (–2147483648 to 2147483647). If the specified starting value exceeds this range, a precision overflow occurs, which leads to incorrect results.

Affected versions:

V1.3.20 to V1.3.35.

Fixed versions:

V1.3.36 and later.

Upgrade to the latest version.

P2

After upgrading a Hologres instance from V1.1 to V1.3, querying or writing Array data to a partitioned table fails with the error: internal error: Datasets has different schema Schema. This issue occurs when a query accesses partitions created both before and after the upgrade.

If an Array-type field in the parent table of a partitioned table does not have the not null attribute specified, the current version incorrectly handles the nullable attribute. Before an upgrade, the field defaults to nullable, but in newly created child partition tables after the upgrade, it defaults to not null. When a query hits multiple partitions created both before and after the upgrade, an execution error occurs because the metadata of the child partition tables is inconsistent.

Affected versions:

V1.3.20 to V1.3.35.

Fixed versions:

V1.3.36 and later.

  • Modify a property of the parent partitioned table. For example:

    CALL set_table_property('table_name', 'time_to_live_in_seconds', 'xx');
  • Upgrade to the latest version.

January 2023

Level

Description

Cause

Affected and fixed versions

Workarounds

P2

When JSONB column store is enabled for a partitioned table, queries on the parent table are slow, but queries on its child tables are fast.

CREATE TABLE public.hologres_parent(a text, b jsonb) PARTITION BY LIST(a);CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');SELECT b->>'xxx' FROM hologres_parent;

When JSONB column store is enabled and a parent table is queried, the optimizer fails to push the query down to the child tables. This forces a scan of the entire JSONB column, degrading performance.

Affected:

Versions 1.3.20 to 1.3.34.

Fixed:

Version 1.3.35 and later.

  • Query the child tables directly.

  • Upgrade to the latest version.

P2

When using JSONB column store, a query with a LIMIT clause is slow because the column store optimization is not applied.

create table jsonb_test(inputvalues JSONB );SELECT inputvalues ->> 'price' pos_id FROM jsonb_test where inputvalues ->> 'price' = 'aaa' limit 100;

The presence of a LIMIT clause causes column store pushdown to fail in the execution plan. This forces a scan of the entire JSONB column during computation, degrading performance.

Affected:

Versions 1.3.20 to 1.3.34.

Fixed:

Version 1.3.35 and later.

  • Avoid using a LIMIT clause when JSONB column store is enabled.

  • Upgrade to the latest version.

P0

If an instance with MC direct read enabled restarts (for example, due to scaling out compute nodes or an OOM event), it fails to start.

A bug caused an inconsistency between metadata and data status when MC direct read was enabled. This prevented the storage engine from loading data correctly, causing startup to fail. Note that the fix for this issue may result in the loss of delete statuses.

Affected:

Versions 1.3.14 to 1.3.33.

Fixed:

Version 1.3.34 and later.

  • Do not enable MC direct read in affected versions.

  • Upgrade to the latest version.

P2

When querying the Binlog of a column-oriented table with a set Segment Key, a filter condition in the WHERE clause that uses the Segment Key is ignored.

BEGIN;CREATE TABLE test (  id int PRIMARY KEY,  title text NOT NULL,  c_time timestamptz);CALL set_table_property ('test', 'orientation', 'column');call set_table_property('test', 'event_time_column', 'c_time');call set_table_property('test', 'binlog.level', 'replica');call set_table_property('test', 'binlog.ttl', '86400');COMMIT;SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test where c_time = 1;

In this example, the query returns rows with c_time values other than 1.

For a column-oriented table with both Binlog and a Segment Key configured, using the Segment Key in a WHERE clause generated an incorrect execution plan, rendering the filter ineffective.

Affected:

Version 1.3.33 and earlier.

Fixed:

Version 1.3.34 and later.

Upgrade to the latest version.

P2

Using the #> operator to parse JSONB returns the following error: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. Sample table creation SQL:

create table t1 (f1 json);insert into t1 values ('{"a":"Hello\u00F7"}');SELECT f1 #> ARRAY['a'] FROM t1;

The #> operator is implemented with the json_extract_path function, which defaults to PostgreSQL ASCII encoding when parsing JSONB. This behavior causes the error.

Affected:

Version 1.3.33 and earlier.

Fixed:

Version 1.3.34 and later.

Upgrade to the latest version.

2022 defect history

December 2022

Level

Description

Cause

Affected and fixed versions

Workaround

P2

After you create a new database with the SPM permission model, consuming a Hologres Binlog for the first time using JDBC fails with the following error: ERROR: internal error: create table hologres.hg_replication_progress failed.

To consume a Hologres Binlog using JDBC, the system runs the GRANT SELECT ON TABLE hologres.hg_replication_progress TO PUBLIC; command to grant all users permission to view the hg_replication_progress table. However, the SPM permission model disables the GRANT command, which prevents the table from being created, causing the Binlog consumption to fail.

Affected versions:

V1.3.20 to V1.3.32.

Fixed versions:

V1.3.33 and later.

  • Switch to the standard PostgreSQL authorization model to grant permissions, then return to the SPM permission model to consume the Binlog. Alternatively, consume the Binlog directly using the standard PostgreSQL authorization model.

  • Upgrade to a fixed version.

P1

After an upgrade to Hologres V1.3.30, the memory usage of the instance increases unexpectedly, even though the QPS and data volume remain unchanged.

Hologres has a result cache by default. If an insert operation into this cache fails, Hologres does not release the associated resources promptly, causing memory usage to increase.

Affected versions:

V1.3.30 to V1.3.31.

Fixed versions:

V1.3.32 and later.

Upgrade to a fixed version.

P2

Nesting the jsonb_array_element function within the jsonb_object_field function causes the following error: internal error: Only jsonb_object_field and jsonb_object_field_text supported. The following SQL statement reproduces the error.

create table t1(f1 jsonb);insert into t1 values ('[{"a":1},{"b":2}]');SELECT  f1->0->'a' FROM t1;

A logic error in function nesting causes a value mismatch.

Affected versions:

V1.3.20 to V1.3.29.

Fixed versions:

V1.3.30 and later.

Upgrade to a fixed version.

P2

Queries on a read-only secondary instance may return duplicate primary keys, while queries on the primary instance do not.

If data is deleted immediately after being imported, a subsequent failover on the read-only secondary instance (triggered by an upgrade or scale-out) can prevent the cleanup of duplicate primary key data. This causes queries to return duplicate keys.

Affected versions:

V1.3.27 to V1.3.28.

Fixed versions:

V1.3.29 and later.

  • Query the primary instance instead.

  • Upgrade to a fixed version.

November 2022

Level

Description

Cause

Affected/fixed versions

Workaround

P2

When you create a table and set a nullable field as the clustering key or segment key, query results are occasionally inconsistent.

For tables with a nullable clustering key or segment key, the result cache incorrectly stores query results, leading to inconsistent query results.

Affected versions:

V1.1.30 to V1.3.27.

Fixed versions:

V1.3.28 and later.

  • Recreate the table and ensure that the field set as the clustering key or segment key is not nullable.

  • Upgrade to a fixed version.

P2

Using the ST_Collect(col) function causes the ERPC_CONNECTION _CLOSED error.

The error occurs because Hologres incorrectly checks the native PostgreSQL node tag value, which it uses to ensure PostGIS compatibility.

Affected versions:

V1.3.27 and earlier.

Fixed versions:

V1.3.28 and later.

Upgrade to a fixed version.

P2

Calling the string_agg(text) function causes the An I/O error occurred while sending to the backend error.

The string_agg function is processed by PQE in Hologres. When string_agg(text) is used without a specified separator, PQE encounters a null pointer, which causes a query error.

Affected versions:

V1.3.20 to V1.3.27.

Fixed versions:

V1.3.28 and later.

  • Modify the SQL statement to explicitly specify a separator, for example, string_agg(text, ',').

  • Upgrade to a fixed version.

P2

When you read data from a MaxCompute external table, the result of a query with a WITH statement is inconsistent with the result of a query without a WITH statement.

When reading a MaxCompute foreign table in a format such as CFile or RANGE TABLE, if the query contains a WITH clause and the column order of the output from the WITH clause does not match the column order of the table, the Hologres foreign table interface outputs results in the wrong order, which causes inconsistent query results.

Affected versions:

V1.3.24 to V1.3.26.

Fixed versions:

V1.3.27 and later.

  • Do not use a WITH statement in the query.

  • Upgrade to a fixed version.

P2

Querying an ARRAY-type field in a MaxCompute foreign table causes the Array length did not match record batch length error.

When accessing a MaxCompute table in ORC format, the Hologres foreign table interface handles the length of ARRAY-type fields inconsistently. This can cause the data length to exceed the limit, resulting in an error.

Affected versions:

V1.3.20 to V1.3.26.

Fixed versions:

V1.3.27 and later.

Upgrade to a fixed version.

October 2022

Level

Description

Cause

Affected/fixed versions

Workaround

P2

When you set the distribution key to an empty string, a query fails with the following error: Failed to get bh reader: internal error CONTEXT. The following is a sample DDL statement:

call set_table_property('<table_name>', 'distribution_key', ' ');

If the distribution key is an empty string, data cannot be routed to the correct shard, causing a query error.

Affected versions:

V1.3.24 and earlier.

Fixed versions:

V1.3.26 and later.

  • Recreate the table and set a valid distribution key.

  • Upgrade to the latest version.

    Note

    After the upgrade, setting the distribution key to an empty string is still not supported and triggers an error during table creation.

P2

When you query a MaxCompute foreign table, the following error is reported: column with id 0 has type date64[ms] but ReadColumn returns array Array(type=timestamp[ms, tz=UTC].

Hologres incorrectly converts the DATETIME type when reading a MaxCompute foreign table, causing a query error.

Affected versions:

V1.3.20 to V1.3.24.

Fixed versions:

V1.3.25 and later.

Upgrade to the latest version.

P2

After a Hologres instance is upgraded to V1.3.20, an error is reported when you query a MaxCompute foreign table that contains an array field: internal error: IOError: Invalid flatbuffers message.

A query error occurs because the system uses an outdated read interface that does not recognize the array type.

Affected versions:

V1.3.20 to V1.3.24.

Fixed versions:

V1.3.25 and later.

  • Temporarily avoid querying array fields.

  • Upgrade to the latest version.

P2

When you import data from a PostgreSQL system table into a Hologres internal table, the results in the Hologres table are unstable and change randomly. For example:

-- Query result is 22505
SELECTcount(1)FROMpg_class c inner join pg_attribute a on c.oid = a.attrelid
-- Create an internal table
CREATE TABLE public. tables11 (schemaname name NULL);
truncate public. tables11
-- Inserted data changes randomly
insert into public.tables11
SELECT'tmp'FROMpg_class c inner join pg_attribute a on c.oid = a.attrelid
SELECT count(1) FROM public.tables11

PostgreSQL system tables are native PostgreSQL objects. Hologres is a distributed system where continuous DDL operations can cause version mismatches across FEs. Querying PostgreSQL system tables can retrieve data from different FEs, leading to unstable results.

Affected versions:

V1.3.22 to V1.3.24.

Fixed versions:

V1.3.25 and later.

Upgrade to the latest version.

P2

After you upgrade a Hologres instance to V1.3.20 or later, queries that contain DECIMAL fields in a case when statement can fail with the error: internal error: column with id 0 has type decimal(38, 3) but ReadColumn returns array Array(type=decimal(38, 10) length=3 null_count=0.

In a case when statement, the precision of the DECIMAL type is not explicitly cast. The optimizer incorrectly infers the precision when generating the execution plan, causing the query to fail.

Affected versions:

V1.3.20 to V1.3.24.

Fixed versions:

V1.3.24 and later.

Upgrade to the latest version.

P2

When you import data from a PostgreSQL system view into a user-created Hologres table, no data is inserted. Sample SQL:

CREATE table holo_pg_tables (schemaname text,tablename text,tableowner text,tablespace text,hasindexes text,hasrules text,hastriggers text,rowsecurity text);
insert into holo_pg_tables SELECT * FROM pg_catalog.pg_tables;

The PostgreSQL system view pg_catalog.pg_tables includes the filter condition c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]). During execution plan generation, this type is incorrectly converted to a meaningless value, so no rows match the filter.

Affected versions:

V1.3.22 to V1.3.24.

Fixed versions:

V1.3.25 and later.

Upgrade to the latest version.

P2

Configuring two Proxima vector indexes on a table can degrade Proxima vector query performance compared to configuring only one. Sample DDL:

call set_table_property('t1', 'proxima_vectors', '{"f2":{"algorithm":"Graph","distance_method":"InnerProduct"}},{"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}}');

When you define two indexes, the syntax for the {} block in the DDL statement is incorrect. Each index must have its own {} block. The FE failed to reject the DDL statement with this format. As a result, the first index was created successfully, but the second index was discarded, which caused a decrease in query performance. The correct format is as follows:

call set_table_property('t1', 'proxima_vectors', '{"f2":{"algorithm":"Graph","distance_method":"InnerProduct"},"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}}');

Affected versions:

V1.3.24 and earlier.

Fixed versions:

V1.3.25 and later.

  • Recreate the table and use the correct DDL syntax to set the indexes.

  • Upgrade to the latest version.

    Note

    After the upgrade, this incorrect syntax is still not supported but will trigger an error during table creation.

P2

When a non-superuser runs the SELECT hg_dump_script('xxxx') command, the following error is reported: ERROR: permission denied for table pg_subscription.

The hg_dump_script function indirectly calls pg_subscription for logical replication. The error occurs because the authorization check for pg_subscription fails.

Affected versions:

V1.3.20 to V1.3.24.

Fixed versions:

V1.3.25 and later.

  • Use a superuser account to grant permissions. Sample command:

    GRANT SELECT ON pg_subscription TO "xx";
  • Upgrade to the latest version.

P2

A RAM user receives the NoSuchProject error when using Flink to consume a Hologres binlog or using DataHub to write data to Hologres.

The error occurs because the frontend incorrectly parses the RAM user.

Affected versions:

V1.3.23 and earlier.

Fixed versions:

V1.3.24 and later.

Upgrade to the latest version.

P2

After you upgrade a Hologres instance from V1.1 to V1.3, queries against MaxCompute foreign tables can take longer. When you check the execution plan by running EXPLAIN, the row_count field in the table statistics is 1000. This indicates that the table statistics are not automatically updated.

After a Hologres instance is upgraded to V1.3, Auto Analyze does not detect the foreign table schema. As a result, table statistics for the foreign table are not collected promptly.

Affected versions:

V1.3.14 to V1.3.23.

Fixed versions:

V1.3.24 and later.

  • Manually run the ANALYZE <tablename> command.

  • Upgrade to the latest version.

P2

Queries that use UNION ALL with DECIMAL fields can fail with the error: Schema fields[4] has type decimal(14, 4) but decimal(11, 2) is expected.

Example:

CREATE TABLE t1(n decimal(6,4));
CREATE TABLE t2(n decimal(5,3));
SELECT * FROM (SELECT 1 as type, n FROM t1 UNION ALL SELECT 2 as type, n FROM t2)t where t.type=2;

During execution plan generation for a UNION ALL operation, the DECIMAL type's precision is incorrectly truncated, causing a precision mismatch.

Affected versions:

V1.3.20 to V1.3.23.

Fixed versions:

V1.3.24 and later.

Upgrade to the latest version.

September 2022

Level

Description

Cause

Affected/fixed versions

Workarounds

P2

A schema specified in a JDBC connection string is not applied and defaults to the public schema. The following is a sample connection string:

String jdbcUrl = "jdbc:postgresql://hostname: port /dbname?currentSchema=demo;

The FE node ignores the string that follows the question mark (?) in the connection string, causing the currentSchema setting to be ignored.

Affected versions:

V1.3.14 to V1.3.22.

Fixed versions:

V1.3.23 and later.

Upgrade to a fixed version.

P1

An instance briefly restarts when an SQL query is automatically rewritten to use a materialized view.

When generating an execution plan for a query that is rewritten to use a materialized view, the optimizer fails to retrieve table metadata, causing an instance failure.

Affected versions:

V1.3.14 to V1.3.22.

Fixed versions:

V1.3.23 and later.

Upgrade to a fixed version.

P2

If you configure different IP whitelist policies for different users in an instance, users cannot access the Hologres instance even from IP addresses within the whitelist, and the error reject ip xxx is returned.

The gateway incorrectly blocks the user after an IP whitelist is configured. This prevents the user from accessing the instance despite being on the whitelist.

Affected versions:

V1.3.21 and earlier.

Fixed versions:

V1.3.22 and later.

  • Do not configure an IP whitelist, or change the user policy for the whitelist to ALL by setting the Accessible Databases parameter to ALL.

  • Upgrade to a fixed version.

P2

In a point query scenario that uses a Fixed Plan, querying Decimal data returns the following error message: get result failed:scale should between xxxx. The following is an example:

begin;create table t (k1 int, k2 decimal(18, 2), primary key(k1, k2));call set_table_property ('t', 'distribution_key', 'k1');end;insert into t (1, 12.11);set hg_experimental_enable_fixed_dispatcher_for_scan = on;SELECT * FROM t where k1=1 and k2>10.1 and k2 < 12.3;

In a Fixed Plan scenario, the optimizer incorrectly infers the precision of the Decimal type, causing the error.

Affected versions:

V1.3.20 and earlier.

Fixed versions:

V1.3.21 and later.

Upgrade to a fixed version.

P2

After an IP whitelist is enabled, a Flink job that consumes Hologres Binlog fails with the following error: reject ip 1.xxx.

Flink consumes Hologres Binlog using the Hologres real-time data import interface (non-JDBC mode), which does not support the IP whitelist feature.

Affected versions:

V1.3.20 and earlier.

Fixed versions:

V1.3.21 and later.

  • Do not configure an IP whitelist.

  • Upgrade to a fixed version.

P2

When you explicitly cast an array type to a string type, the following error occurs: ERROR: Cast FROM LIST to STRING is not supported.. For example:

create table aaa1(a text[],b int[]);insert into aaa1 values (ARRAY['1','aaa'], ARRAY[1,2,3]);d=# SELECT a::text, b::text FROM aaa1;

Hologres does not support explicitly casting an array type to a string type.

Affected versions:

V1.3.20 and earlier.

Fixed versions:

V1.3.21 and later.

Upgrade to a fixed version.

P1

When you query a MaxCompute foreign table, the query hangs. Restarting the instance resolves the issue.

When reading metadata during a primary/secondary switchover in the MaxCompute metadata service, Hologres fails to handle the exception. This causes retries to fail and the query to hang.

Affected versions:

V1.3.20 and earlier.

Fixed versions:

V1.3.21 and later.

Upgrade to a fixed version.

August 2022

Level

Description

Cause

Versions

Workarounds

P2

Executing an SQL query in JDBC Prepare Statement mode fails with the following error: cannot push query id when transaction is not start.

In JDBC Prepare Statement mode, a transaction has not started upon SQL execution. This prevents Query ID generation and triggers the error.

Affected:

V1.1.80 to V1.1.86.

Fixed:

V1.3.20 and later.

  • Change the JDBC connection string to Simple mode: jdbc:postgresql://<host>:<port>/<dbname>?preferQueryMode=simple.

  • Upgrade to the latest version.

P2

Setting a TTL value that contains a comma, for example, CALL set_table_property('wdt_qyb.wdt_qyb_trade', 'time_to_live_in_seconds', '315,360,000');, causes data to be deleted prematurely.

A TTL value containing a comma, such as 315,360,000, is parsed incorrectly. The SQL parser ignores the value after the comma, setting the TTL to 315s and causing premature data expiration.

Affected:

V1.1.85 and earlier.

Fixed:

V1.3.20 and later.

  • When setting the TTL, use an integer value without commas.

  • Upgrade to the latest version.

    Note

    After the upgrade, setting an invalid TTL value that contains a comma triggers an error during table creation or TTL modification.

P2

If the clustering key and primary key (PK) of a row-oriented table are inconsistent, queries fail with the error: internal error: Cannot build column col1.

For example:

CREATE TABLE test(col1 text,col2 text,col3 text,PRIMARY KEY (col1, col2)); CALL set_table_property('public.test', 'distribution_key', 'col1'); CALL set_table_property('public.test', 'clustering_key', 'col1:asc');SELECT * FROM public.test;

If the clustering key and PK of a row-oriented table are inconsistent, the storage engine incorrectly generates identical records, leading to a query error.

Affected:

V1.1.84 and earlier.

Fixed:

V1.3.20 and later.

  • Set the clustering key and PK to be the same for the row-oriented table.

  • Upgrade to the latest version.

P2

When a non-superuser account consumes Hologres Binlog using JDBC, running the call hg_create_logical_replication_slot('hg_replication_slot_1', 'hgoutput', 'hg_publication_test_1'); command fails with the following error: permission denied for table hg_replication_slot_properties.

Consuming Hologres Binlog data by using JDBC requires a superuser account because non-superuser accounts lack the necessary permissions.

Affected:

V1.1.83 and earlier.

Fixed:

V1.3.20 and later.

  • Use a superuser account.

  • Upgrade to the latest version and grant the required permissions to the non-superuser account. For more information, see Consume Hologres Binlog using JDBC.

P2

Some entries are missing from the slow query log, but monitoring still shows latency and QPS.

Different queries in the same transaction share the same Query ID. The metadata warehouse deduplicates these queries and keeps only one entry, dropping the other queries.

Affected:

V1.1.80 and earlier.

Fixed:

V1.3.20 and later.

Upgrade to the latest version.

P2

When consuming Hologres Binlog, you receive the following error: com.alibaba.hologres.org.postgresql.util.PSQLException: ERROR: relation "hologres.hg_replication_slot_properties" does not exist.

An FE node of the instance was restarted. After recovery, the node failed to restore the Hologres Binlog extension, causing consumption to fail.

Affected:

Versions earlier than V1.3.

Fixed:

V1.3.20 and later.

Upgrade to the latest version.

July 2022

Level

Description

Cause

Affected and fixed versions

Workaround

P2

After a hot upgrade, querying a table fails with the following error: File(fn: xxx) real size != size in meta: 0 != yyyy.

An offline BulkLoad write to a table during a hot upgrade triggered compaction, creating a metadata compatibility issue that caused the error.

Affected versions:

V1.1.80 and earlier.

Fixed versions:

V1.1.81 and later.

  • Pause offline writes to the table during a hot upgrade, or perform a cold upgrade instead.

  • Upgrade to a fixed version.

P2

Concurrently writing back to different partitions of the same MaxCompute table fails with the following error: ERROR:commit uploder failedErrorMessage=Operation failed due to concurrent upload/insert operationson the same table.

Although the concurrent writes target different partitions, they all belong to the same MaxCompute table. The write back interface acquires a single table lock for all partitions during a commit upload session, causing a lock conflict.

Affected versions:

V1.1.78 and earlier.

Fixed versions:

V1.1.79 and later.

Upgrade to a fixed version.

June 2022

Severity

Description

Cause

Affected/fixed versions

Workaround

P2

An OOM (Out Of Memory) error occurs when analyzing an OSS foreign table.

When you run ANALYZE on an OSS foreign table, the row count retrieval process samples a large number of rows by default (more than 30,000), which causes an OOM error.

Affected versions:

V1.1.76 and earlier

Fixed versions:

V1.1.77 and later

Upgrade to a newer version.

P2

An SQL query with an in clause fails if the constant type in the in clause does not match the column type, returning the following error: internal error: Invalid filter value type int32 for column type int16.

The following is a sample SQL statement:

create table test(pid smallint);insert into test values (1);SELECT pid FROM test where pid not in (4, 5);

When the constant type in the in clause differs from the column type, the optimizer fails to cast the constant to the correct type. This causes an error in the execution engine.

Affected versions:

V1.1.73 and earlier

Fixed versions:

V1.1.74 and later

  • Ensure that the constant type in the in clause matches the column type.

  • Upgrade to a newer version.

P2

Creating an OSS foreign table with a subset of the source columns fails with the following error: Open ORC file failed for schema mismatch.

When you create a foreign table by selecting only a subset of OSS columns, the engine does not fully support this operation and requires that all source columns be included.

Affected versions:

V1.1.73 and earlier

Fixed versions:

V1.1.74 and later

  • Select all columns when you create the foreign table.

  • Upgrade to a newer version.

P2

Write performance for insert operations slows down if data was recently deleted from a range (for example, a partition) in the same table.

After a range or a sequence of consecutive values is deleted, if the compaction is not yet complete, an insert command first queries for duplicate records in that range until it finds the first undeleted record. If a large number of consecutively deleted records exist near the queried key, traversing these records consumes significant time and slows down the write speed of the insert command.

Affected versions:

V1.1.70 and earlier

Fixed versions:

V1.1.71 and later

Upgrade to a newer version.

May 2022

Level

Description

Cause

Versions

Workaround

P2

When you query a MaxCompute table, the following error is reported: Timestamp overflow detected while converting timestampFROM orc VectorBatch to arrow.

This error occurs because Hologres does not support the nanosecond-level precision that Tunnel applies to the TIMESTAMP data.

Affected versions:

V1.1.69 and earlier

Fixed versions:

V1.1.70 and later

  • Change the TIMESTAMP data type of the MaxCompute table to DATETIME.

  • Upgrade to the latest version.

P2

When querying OSS Parquet data, count statements return inconsistent results, even though the OSS data has not changed.

Hologres uses an outdated interface to read OSS Parquet files. This causes it to randomly interpret non-null data as null values, leading to incorrect query results.

Affected versions:

V1.1.67 and earlier

Fixed versions:

V1.1.68 and later

Upgrade to the latest version.

P2

The following error can occur when you write data back to MaxCompute from Hologres using SQL: Blocks not match, server:xx client yy.

The error can occur if the write operation to MaxCompute times out, which generates an empty block. The default timeout is 300 seconds.

Affected versions:

V1.1.64 and earlier

Fixed versions:

V1.1.65 and later

  • Use the following command to modify the timeout:

    alter server odps_server options (add socket_timeout '600');

    Increasing the timeout to 600s reduces the likelihood of generating an empty block.

  • Upgrade to the latest version.

P2

In Hologres V1.1, when you add multiple columns to a MaxCompute foreign table in a single statement, the following error is reported: not support alter table with multi commands. Example SQL:

ALTER FOREIGN TABLE bank ADD COLUMN cons_conf_idx float8, ADD COLUMN euribor3m float8;

Hologres V1.1 adds a status check for the add column operation on foreign tables. This check is faulty when you add multiple columns at once, causing the operation to fail.

Affected versions:

V1.1.1 to V1.1.58

Fixed versions:

V1.1.59 and later

  • Add one column at a time, or use the IMPORT FOREIGN SCHEMA syntax to refresh the foreign table.

  • Upgrade to the latest version.

P1

When you use the to_date function with a WHERE clause, the following error is reported: invalid value \"\" for \"YYYY\" HGERR_detl Field requires 4 characters, but only 0 could be parsed. Example query:

SELECT *  FROM public.test where to_date(content, 'YYYYMMDD' ) BETWEEN  '2021-10-22' AND '2021-10-23' limit 10;

The query optimizer incorrectly applies the to_date function to rows before they are filtered by the WHERE clause. As a result, the function processes invalid data, which causes a conversion error.

Affected versions:

V1.1.58 and earlier

Fixed versions:

V1.1.59 and later

Upgrade to the latest version.

P2

During a concurrent read of an encrypted MaxCompute table, the following error is reported: failed to load row group data FROM file pangu.

A decryption error can occur when multiple readers try to parse an encrypted MaxCompute table in parallel.

Affected versions:

V1.1.57 and earlier

Fixed versions:

V1.1.58 and later

Upgrade to the latest version.

P2

When HQE processes a modulo calculation (%) on a NUMERIC or DECIMAL field, it returns an incorrect result.

HQE does not support modulo calculations for NUMERIC and DECIMAL types but fails to validate the data type, leading to an incorrect result.

Affected versions:

V1.1.55 and earlier

Fixed versions:

V1.1.56 and later

  • Do not perform modulo calculations on NUMERIC and DECIMAL fields.

  • Upgrade to the latest version.

    Note

    After the upgrade, performing a modulo calculation on a NUMERIC or DECIMAL field correctly returns an error, as the operation remains unsupported.

April 2022

Level

Description

Cause

Affected/Fixed versions

Recommendations

P2

When you subscribe to Hologres Binlog via JDBC, the instance briefly restarts if you start a JDBC job to consume the binlog by using pgreplicationstream.start() and simultaneously execute drop table xx; to delete the corresponding table on the database side.

Dropping a table during binlog subscription causes a null pointer exception. This happens because the subscription process tries to fetch thetable_properties of the deleted table, which causes the instance to restart.

Affected versions:

V1.1.54 and earlier.

Fixed versions:

V1.1.55 and later.

  • Do not drop a table while subscribing to its binlog.

  • Upgrade to a fixed version.

    Note

    After the upgrade, dropping a table during binlog subscription correctly reports an error that the table does not exist.

P2

After a partitioned child table is detached from a parent table, you cannot attach it to the same parent table because the attach operation is not allowed.

A partitioned child table created by using the CREATE TABLE <table_name> PARTITION OF <parent_table> command does not inherit the Table Group property from the parent table. When you detach and then attach the partitioned child table, the attach operation fails because a validation check detects that the Table Group properties of the child table and the parent table do not match.

Affected versions:

V1.1.52 and earlier.

Fixed versions:

V1.1.53 and later.

Upgrade to a fixed version.

P2

A query that usesgrouping sets with multiplecount distinct aggregations on a partitioned table returns incorrect results.

When a query on a partitioned table usesgrouping sets with multiplecount distinct aggregations, the optimizer fails to apply partition pruning. As a result, the optimizer ignores partition filter conditions and returns incorrect results.

Affected versions:

V1.1.52 and earlier.

Fixed versions:

V1.1.53 and later.

Upgrade to a fixed version.

March 2022

Level

Description

Cause

Affected/fixed versions

Workaround

P2

When a user-mapping is not configured, querying an OSS foreign table by using Data Lake Formation (DLF) fails with the error failed to import foreign schema.

If a user-mapping is not configured, the authorization interface passes incorrect permissions, causing the query to fail.

Affected versions:

V1.1.50 and earlier.

Fixed versions:

V1.1.51 and later.

  • Explicitly configure a user-mapping. For more information, see Accelerate access to OSS data lakes with DLF.

  • Upgrade to a later version.

    Note

    After upgrading, you can access the data without explicitly creating a user-mapping.

P2

In PrepareStatement mode, an SQL query may fail with the error unrecognized node type: 0, or the Hologres instance may briefly restart.

PrepareStatement mode can generate a plan cache for frequently executed SQL statements to reduce client-side overhead. In affected versions, the plan cache for SQL statements is not retrieved promptly, causing query failures.

Affected versions:

V1.1.47 to V1.1.50.

Fixed versions:

V1.1.51 and later.

  • Change the JDBC connection string to Simple mode by using the jdbc:postgresql://<host>:<port>/<dbname>?preferQueryMode=simple setting.

  • Upgrade to a later version.

P1

An error occurs when you write to Hologres in Blink or Flink RPC mode: failed to create channel into server xxx, connection refused to rpc proxy endpoint.

When writing to Hologres using Blink or in Flink RPC mode, the API fails to return the RPC proxy port, causing the write operation to fail.

Affected versions:

V1.1.50 and earlier.

Fixed versions:

V1.1.51 and later.

  • Switch the Flink job to JDBC write mode. For more information, see fully managed Flink.

  • Upgrade to a later version.

P2

Executing a JOIN statement that contains union all reports the error internal error: 0 shard end shard value: xxx doesn\'t.

The optimizer generates an incorrect execution plan for JOIN statements that contain union all, which causes the execution to fail.

Affected versions:

V1.1.49 and earlier.

Fixed versions:

V1.1.50 and later.

Upgrade to a later version.

P2

When you use the json_array_elements function in an SQL statement that contains a JOIN clause, the query fails with the error Duplicate keys detected when building hash table.

The execution engine (QE) builds a hash table when it executes the join operator. However, during the data read phase, the execution engine (QE) does not correctly filter data processed by json_array_elements. This causes duplicate data to be read, resulting in the error.

Affected versions:

V1.1.49 and earlier.

Fixed versions:

V1.1.50 and later.

Upgrade to a later version.

P2

When you execute a JOIN statement, the query can fail with the error Explicit remote seek FROM a source is not supported.

If the optimizer generates an execution plan that uses a Nested Loop Join (which you can verify by using EXPLAIN <SQL>), the execution engine may fail to execute the plan correctly, causing an execution error.

Affected versions:

V1.1.49 and earlier.

Fixed versions:

V1.1.50 and later.

Upgrade to a later version.

P2

When a SQL filter condition contains not in, the query result still contains data that should be filtered out by the not in condition. The following is an example.

create table if not exists test(id bigint,  value int);SELECT id FROM test where id in (238024008,276941010) and id not in (238024008) and value in (1, 2, 3);

The optimizer incorrectly processed not in when generating an execution plan, which resulted in an incorrect execution plan, the loss of the not in filter condition, and an incorrect result.

Affected versions:

V1.1.48 and earlier.

Fixed versions:

V1.1.49 and later.

Upgrade to a later version.

P2

In the SLPM permission model, attempting to rename a schema with the CALL slpm_rename_schema ( old_name, new_name ) command reports the error UPDATE is not supported.

In the SLPM permission model, the system performs an incorrect permission check when renaming a schema, causing the command to fail.

Affected versions:

V1.1.47 and earlier.

Fixed versions:

V1.1.48 and later.

Upgrade to a later version.

February 2022

Level

Description

Cause

Affected/fixed versions

Workaround

P2

In SPM or SLPM mode, Auto Analyze or Analyze operations fail after data masking is enabled.

The backend uses the table owner to run Auto Analyze. However, in SPM or SLPM mode, the table owner is a Developer without logon permissions. When sampling masked columns, the request is routed through the Parallel Query Engine (PQE), causing the Auto Analyze or Analyze operation to fail.

Affected versions:

V1.1.1 to V1.1.46.

Fixed versions:

V1.1.47 and later.

  • Disable data masking.

  • Upgrade to a later version.

P1

When you analyze a foreign table that has an excessive number of partitions (typically in a multi-level partition scenario), the operation fails with an error indicating that the partition limit (512 partitions) is exceeded.

The failure occurs because the analysis does not prune the foreign table partitions.

Affected versions:

V1.1.1 to V1.1.46.

Fixed versions:

V1.1.47 and later.

  • If the foreign table has fewer than 1,024 partitions, increase the partition limit for foreign tables before running the Analyze operation.

  • Upgrade to a later version.

    Note

    After the upgrade, the Analyze operation processes a maximum of 512 foreign table partitions by default. To process more partitions, increase the partition limit for the Analyze operation. For more information, see Optimize the query performance of MaxCompute foreign tables.

P1

When you execute the explain analyze SQL command, the result for partitions SELECTed is 0, which does not match the actual number of partitions accessed.

The optimizer's check for partitions SELECTed was incorrect, resulting in a value of 0.

Affected versions:

V1.1.1 to V1.1.46.

Fixed versions:

V1.1.47 and later.

Upgrade to a later version.

P2

When you view slow query logs, information such as the number of rows read (read_rows) and the number of rows returned (result_rows) is not displayed.

The information collected by the metadata warehouse was incomplete.

Affected versions:

V1.1.1 to V1.1.46.

Fixed versions:

V1.1.47 and later.

We recommend that you upgrade to the new version.

Note

Starting from Hologres V1.1.36, you can view the information by setting GUC parameters. In V1.1.47 and later, you do not need to set GUC parameters.

P2

In JDBC PrepareStatement mode, when you insert or SELECT multiple values and run the statement more than three times, the results contain misplaced rows and columns. However, the results are correct if you insert or SELECT a single value in multiple separate statements. For example, a single SQL statement that contains 32 values is executed four times, and the order of the 32 rows in the values clause is randomized for each execution. In contrast, if one SQL statement that contains only one value is executed 32 times, the result is correct.

In PrepareStatement mode, when you performed multiple insert or SELECT operations on multiple values, the optimizer generated an incorrect execution plan.

Affected versions:

V1.1.46 and earlier.

Fixed versions:

V1.1.47 and later.

P2

When you execute a non-JOIN SQL statement, such as a statement that contains count distinct, the following error is reported: error: Hash32 shard function does not support decimal or fixed binary type.

Non-JOIN SQL statements might also use a shard function to generate an execution plan. However, the shard function does not support data types such as NUMERIC. This causes an error when some non-exact data types are used.

Affected versions:

V1.1.46 and earlier.

Fixed versions:

V1.1.47 and later.

Upgrade to a later version.

P1

A query that uses the condition key = max(key) unexpectedly returns only one row. A query that uses the condition key in max(key) returns the expected result.

When the optimizer generated the execution plan, it converted key = max(key) to order by id asc limit 1. This type of query always returns only one row, which resulted in the unexpected output.

Affected versions:

V1.1.46 and earlier.

Fixed versions:

V1.1.47 and later.

  • Use the condition key in max(key).

  • Upgrade to a later version.

P2

If a DDL statement from a non-PostgreSQL source such as JDBC contains a code comment at the end, write or query operations hang after the statement is successfully executed. Example: create table ttxwsx1(i int); -- comments -- xxxxx.

A comment at the end of a DDL command prevents the final semicolon from functioning as a command separator. As a result, the next command is appended to the comment, invalidating the SQL statement. This leads to a replay failure between nodes and causes write or query operations to hang.

Affected versions:

V1.1.45 and earlier.

Fixed versions:

V1.1.46 and later.

  • Remove the comment at the end of the DDL statement.

  • Upgrade to a later version.

P1

When you query a row-oriented table by primary key, some data may not be returned.

A bug in handling concurrent background file compaction for the row-oriented table incorrectly located some manifest files. As a result, queries could not find some data.

Affected versions:

V1.1.44 and earlier.

Fixed versions:

V1.1.45 and later.

Upgrade to a later version.

P2

After a Hologres instance is upgraded to V1.1, queries on MaxCompute foreign tables with multi-level partitions slow down or cause an out-of-memory (OOM) error if the SQL filter condition contains an or operator. In V0.10, these queries took only a few seconds.

In Hologres V1.1, the optimizer fails to recognize the operator generated by an or condition in multi-level partition filtering. This results in an empty filter, which causes all partitions to be scanned and leads to slow queries or out-of-memory (OOM) errors.

Affected versions:

V1.1.44 and earlier.

Fixed versions:

V1.1.45 and later.

Upgrade to a later version.

P1

Memory usage remains high for an extended period even when CPU usage is low. Monitoring shows a high QPS (hundreds of queries per second or more) on only a few dozen connections, indicating that a single connection is executing SQL at a very high rate.

When an SQL statement is executed, the optimizer retrieves table statistics. If a single connection executes SQL at a high rate for a long time without being closed, a memory leak occurs when statistics are retrieved, causing high memory usage.

Affected versions:

V1.1.44 and earlier.

Fixed versions:

V1.1.45 and later.

  • Set the following parameter: set hg_experimental_always_show_execution_statistics=off;.

  • Upgrade to a later version.

P2

The SQL statement contains a not like xxx% condition, but the query results still include data that should have been filtered out by the not like condition.

When the optimizer generated the execution plan, a preprocessing rule for like-related functions was incorrect. This led to an incorrect rewrite of the query and an incorrect result.

Affected versions:

V1.1.44 and earlier.

Fixed versions:

V1.1.45 and later.

  • If an SQL query with a like condition causes an error, set the following parameter: hg_experimental_remove_redundant_cmp=off;.

  • Upgrade to a later version.

P1

Logging on with an STS account fails with the error Cloud authentication failed, even though the account credentials are correct.

The authentication interface incorrectly processed the status of the STS account.

Affected versions:

V1.1.43 to V1.1.44.

Fixed versions:

V1.1.45 and later.

Upgrade to a later version.

P0

Data loss may occur if the data write process on the engine side crashes after the application-side write operation is complete. As a result, users may find data missing during queries.

Normally, a success response is returned to the client only after the Write-Ahead Log (WAL) is flushed to disk. This ensures data persistence and consistency. However, if a disk flush timed out and triggered a retry, the system first wrote data to the memory cache and returned a success response. If the instance crashed before this data was persisted, the application would have received a success confirmation, but the data would be lost from the data storage layer.

Affected versions:

V0.8 and earlier.

Fixed versions:

V0.9 and later.

Upgrade to a later version.

P1

Instance write and query operations fail with the error ERROR: Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED.

After the error occurred, query retries from the client side combined with retries from the backend frontend node led to an excessively high request volume. The Store Master, which handles metadata management, could not process the requests in time and reported an error.

Affected versions:

V1.1.43 and earlier.

Fixed versions:

V1.1.44 and later.

  • Use the set optimizer_join_order=query command.

  • Upgrade to a later version.

P2

You add a DECIMAL column without specifying its precision by executing a statement such as alter table add column c0 decimal;. The statement is successful, but a query on the new column fails with the error Schema fields[] has type decimal(x,y) but decimal(x1, y1) is expected..

Adding a DECIMAL column without a specified precision is not supported. However, the precision was not validated when a column was added, which caused the query to fail. After the fix, the precision is validated when you add a column, and an error is reported if no precision is specified.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

  • Specify the precision when you add a DECIMAL column.

  • Upgrade to a later version.

P0

A disabled AccessKey can still be used to access a Hologres instance.

The AccessKey authentication interface incorrectly processed the status of a disabled AccessKey, treating it as valid.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

  • Revoke the access permissions of the account.

  • Upgrade to a later version.

P2

Using the copy command on a table with a Default field causes the instance to restart.

The copy function does not support creating tables with default values, which causes the instance to restart due to an out-of-memory (OOM) error.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

Upgrade to a later version.

P2

An INNER JOIN query involving a foreign table reports an error indicating that a column does not exist, such as ERROR: column "id" does not exist, even though the column is not referenced in the SQL statement.

When generating the execution plan, the optimizer incorrectly derived equivalent expressions. It included columns that were not in the output in the derivation, which caused the error.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

Upgrade to a later version.

P1

Executing a complex Nested Loop Join on a hybrid row-column store table causes the instance to restart and then quickly recover.

When the optimizer detected a hybrid row-column store table, it failed to generate a correct execution plan. This caused an error and triggered an instance restart.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

  • Do not use hybrid row-column store tables.

  • Upgrade to a later version.

P1

After a complex import job with a multi-table join (for example, a six-table join) is manually canceled, CPU usage remains at 100% for several hours and the process does not terminate. A subsequent drop table operation also hangs.

For a complex query, the execution plan included a Hash Join operator that involved a large volume of data. The backend experienced a deadlock, causing the job to continue running even after being canceled.

Affected versions:

V1.1.42 and earlier.

Fixed versions:

V1.1.43 and later.

  • Restart the instance.

  • Upgrade to a later version.

January 2022

Level

Description

Cause

Versions

Workaround

P2

When writing data from DataHub to a Hologres partitioned table, the Hologres instance restarts if the corresponding child partition table has not been created.

When writing data from DataHub to a Hologres partitioned table, the write interface does not perform a partition check, causing the instance to coredump.

Affected versions:

V1.1.41 and earlier

Fixed in:

V1.1.42 and later

  • Create the child partition table in Hologres before writing data.

  • Upgrade to a newer version.

    Note

    Even after upgrading, you must create child partition tables before writing data to partitioned tables.

P2

After a child partition table is attached to a parent partition table using attach, querying the partitioned table reports a partition_table_missing error.

The properties of the child partition table (such as NOT NULL constraints, primary key, and clustering key settings) are inconsistent with the parent partition table. The attach operation did not validate these properties, which caused the query to fail.

Affected versions:

V1.1.41 and earlier

Fixed in:

V1.1.42 and later

  • When creating a child partition table, the schema and properties of the child table must be consistent with the attach command's parent partition table.

  • Upgrade to a newer version.

P1

In JDBC PreparedStatement mode, executing an SQL statement with a "<" or ">" filter in the where clause causes the instance to restart.

In JDBC PreparedStatement mode, a "<" or ">" filter condition in the where clause is converted to an INTERVAL during execution plan generation. This conversion process encounters a null pointer, causing the SQL statement to fail and the instance to restart.

Affected versions:

V1.1.0 to V1.1.40

Fixed in:

V1.1.41 and later

Upgrade to a newer version.

P1

When using JDBC PreparedStatement mode, if an IN condition contains more than 100 items, the query may return incorrect or unexpected results.

In JDBC PreparedStatement mode, if an IN condition contains more than 100 items, the execution plan generator incorrectly removes the IN condition, causing the query to return incorrect results.

Affected versions:

V1.1.0 to V1.1.40

Fixed in:

V1.1.41 and later

Upgrade to a newer version.

P2

When you query a table with both row and column stores using an IN condition, the query fails with the error: An I/O error occurred while sending to the backend.. Queries on row-oriented tables are not affected.

For a table with both row and column stores, if the field in the IN condition is a TEXT type with a bitmap index, the optimizer generates an incorrect execution plan, which causes the error.

Affected versions:

V1.1.0 to V1.1.40

Fixed in:

V1.1.41 and later

  • Use a row-oriented table.

  • Upgrade to a newer version.

P2

Executing an SQL statement fails with the error ERROR: serialized_error_msg is null if the where clause uses and to connect in and = conditions. For example:

SELECT * FROM public.conflict_1 where a in (1,31) and a=1;

The backend incorrectly compares the data types of the conditions on either side of the and operator. For example, it fails to reconcile that a = 1 is an integer type while a in (1,2,3) is an array type, causing the execution to fail.

Affected versions:

V1.1.0 to V1.1.40

Fixed in:

V1.1.41 and later

Upgrade to a newer version.

P2

Modifying the lifecycle (TTL) of a child partition table causes the error: Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED.

When modifying the TTL of a child partition table, the metadata manager (Store Manager or SM) fails to validate the schema change, which results in an SQL error.

Affected versions:

V1.1.0 to V1.1.40

Fixed in:

V1.1.41 and later

  • Do not modify the TTL of the child partition table.

  • Upgrade to a newer version.

P2

Executing a drop table statement fails with an invalid table id error. Retrying the operation then fails with an SE object lock failed error.

An instance can have multiple frontend nodes. An SQL statement is first executed on one node and then replayed on others. If a node cannot maintain metadata consistency with other nodes for reasons such as version mismatches, a retry is triggered. When drop table commands are executed concurrently, it can trigger a node-initiated retry. The error occurs because the table lock is not released during the retry process.

Affected versions:

V1.1.39 and earlier

Fixed in:

V1.1.40 and later

  • Execute DDL statements such as drop table sequentially.

  • Upgrade to a newer version.

P1

After Auto Analyze is enabled, the instance reports the following error without a significant increase in QPS: database is not accepting commands to avoid wraparound data loss in database.

After Auto Analyze is enabled, the auto vacuum process on the system table of the frontend node runs too infrequently. This causes a buildup of transactions, leading to the instance failure described in the error message.

Affected versions:

V1.1.38 and earlier

Fixed in:

V1.1.39 and later

Upgrade to a newer version.

P2

Creating a view based on a partitioned table and applying a cast to the partition key column prevents static partition pruning. This degrades performance because all partitions are scanned. The following is an example SQL statement:

--Create a viewcreate view test_partition_table_view asSELECTtest_partition_table.ds::text as dsFROMtest_partition_table;--Query sqlSELECT * FROM test_partition_table_view where ds='20211116';

When the logic is encapsulated in a view, the optimizer applies filter conditions to the column after the cast operation, not to the original partition key column. Because static partition pruning only works on the partition key column, performance is degraded.

Affected versions:

V1.1.38 and earlier

Fixed in:

V1.1.39 and later

  • Do not use cast on the partition key column within the view.

  • Upgrade to a newer version.

P2

  • When the input date is a Sunday, executing the to_char(xxx, 'Day') function causes the instance to restart.

  • When the input date is a Sunday, executing the to_char(xxx, 'D') function returns an incorrect result.

When the input date is a Sunday, the underlying to_char() function calls toDayOfWeek(), which returns a value of 7. This causes an out-of-bounds array access, leading to an instance restart or an incorrect result.

Affected versions:

V1.1.36 and earlier

Fixed in:

V1.1.37 and later

Upgrade to a newer version.

P1

After data masking is enabled on an instance, a subquery containing a CTE function may cause the instance to report a temporary connection or I/O error.

The Hologres instance restarts because the recursive call that processes the CTE function does not handle data masking correctly.

Affected versions:

V1.1.36 and earlier

Fixed in:

V1.1.37 and later

  • Disable data masking.

  • Upgrade to a newer version.

2021 defect history

December 2021

Level

Description

Cause

Versions

Workaround

P0

Setting dictionary encoding for a TEXT column causes the instance to restart briefly. For example:

call set_table_property('tbl', 'dictionary_encoding_columns', 'a');

, where a is a TEXT column.

Manually setting the dictionary encoding changes its property from the default auto to on. This state mismatch prevents compaction and causes a coredump.

Affected versions:

V1.1 to V1.1.35

Fixed versions:

V1.1.36 and later

  • When you manually set dictionary encoding, explicitly set the property to auto, for example: call set_table_property('tbl', 'dictionary_encoding_columns', 'a:auto');.

  • Upgrade to a fixed version.

P2

When you view the slow query log, information such as the number of rows read (read_rows) and the number of rows returned (result_rows) is not displayed.

This issue occurs because the metadata warehouse collects incomplete information.

Affected versions:

V1.1 to V1.1.35

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version. In addition, before you run the SQL statement to view the slow query log, execute one of the following commands.

  • set hg_experimental_force_sync_collect_execution_statistics = on;
  • alter database <dbname> set hg_experimental_force_sync_collect_execution_statistics = on;

P1

A query returns an incorrect result if the WHERE clause contains a case when xx in ('') expression.

Hologres builds a bitmap index for TEXT columns by default. If the column is also nullable, the backend generates an incorrect execution plan for the case when xx in ('') expression, returning an incorrect result.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version.

P1

Queries fail with the following error: Cannot reserve capacity larger than 2^31 - 1 for binary.

Hologres applies dictionary encoding to TEXT columns by default. Inserting a single value larger than 2 GB can cause the dictionary to become too large, leading to query failures.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version.

P1

When querying the binary log, a query that selects binary log fields and filters by a primary key returns no data. A similar query that does not select binary log fields returns the correct data. In the following sample queries, a is the primary key of the test table.

--SQL with binary log fields
SELECT hg_binlog_lsn, hg_binlog_event_type, hg_binlog_timestamp_us FROM test WHERE a = '723295948321120659';
--SQL without binary log fields
SELECT * FROM test WHERE a = '723295948321120659';

The backend optimizer generates an incorrect execution plan for queries with a primary key filter, returning an incorrect result.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version.

P2

When an instance's CPU is at full load, you cannot query information such as active queries and active connections in HoloWeb.

When the CPU is at full load, queries on system tables such as pg_stat_activity fail due to resource limits.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version.

P1

Using an empty ANY array in a query causes the Hologres instance to restart.

The backend mishandles empty ANY arrays, causing the instance to coredump.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

Upgrade to a fixed version.

P1

A query that contains a lead or lag function with its third argument omitted fails with the error: Column column5 should be non-nullable but the values contain 1 nulls.

The executor incorrectly infers the nullability of the output from the lead and lag functions, causing the query to fail.

Affected versions:

V1.1.34 and earlier

Fixed versions:

V1.1.35 and later

Upgrade to a fixed version.

P2

Writing data from Flink to a Hologres table with a Roaring Bitmap column is slow.

The backend write path for Roaring Bitmap data is unoptimized, resulting in poor performance.

Affected versions:

V1.1.35 and earlier

Fixed versions:

V1.1.36 and later

  • Avoid using Roaring Bitmap.

  • Upgrade to a fixed version.

P1

Using Roaring Bitmap can cause the following error: An I/O error occurred while sending to the backend. Memory usage is high even when CPU utilization is low.

The Roaring Bitmap feature has a memory leak.

Affected versions:

V1.1.34 and earlier

Fixed versions:

V1.1.35 and later

  • Avoid using Roaring Bitmap.

  • Upgrade to a fixed version.

P1

A SQL query that contains an order by clause fails with the error: PlStmt Translation: Attribute number 4 not found in project list.

The order by clause generates a sort operator. When creating the execution plan, the optimizer makes an incorrect pushdown decision for this operator. Consequently, the plan generation fails, and an error is reported.

Affected versions:

V1.1.33 and earlier

Fixed versions:

V1.1.34 and later

Upgrade to a fixed version.

P1

A Proxima query fails with the error: HGERR_code XX000 HGERR_msge internal error: record batches is empty.

This error occurs because the backend reads the Proxima file state incorrectly.

Affected versions:

V1.1.33 and earlier

Fixed versions:

V1.1.34 and later

Upgrade to a fixed version.

P2

After an instance is upgraded to V1.1 or restarted for an upgrade/downgrade in V1.1, the first query is unusually slow. The execution plan shows inaccurate statistics. Rerunning the query corrects the statistics and restores performance.

After the instance is upgraded and restarted, the first query fails to retrieve the correct statistics version, resulting in inaccurate statistics and poor performance.

Affected versions:

V1.1 to V1.1.32

Fixed versions:

V1.1.33 and later

  • Run the query again to correct the statistics and restore performance.

  • Upgrade to a fixed version.

P0

Querying a table while a drop or truncate command is running on it causes the instance to restart.

If a drop or truncate operation occurs on a table after a query on that table completes but before its resources are released, the instance coredumps and restarts.

Affected versions:

V1.1.32 and earlier

Fixed versions:

V1.1.33 and later

Upgrade to a fixed version.

P1

After an upgrade to V1.1, a join involving more than ten tables triggers an out of memory (OOM) error. The same operation ran normally on earlier versions.

The optimizer overestimates the number of rows in the tables. As a result, the executor runs out of memory during initialization, preventing the computation from proceeding.

Affected versions:

V1.1 to V1.1.31

Fixed versions:

V1.1.32 and later

Upgrade to a fixed version.

P2

Client-side batching increases latency in point query scenarios.

Each worker node has only one point query write node. When requests are concentrated on a single write node, batching is likely to occur. The batch size limit is too large, leading to long wait times and high point query latency.

Affected versions:

V1.1 to V1.1.31

Fixed versions:

V1.1.32 and later

Upgrade to a fixed version.

P1

For a table with storage encryption, a query with LIMIT ... OFFSET ... returns a result, but the same query returns no result if an order by clause is also included.

For tables with storage encryption, a configuration that deviates from the documentation leads to incorrect version generation. This causes data loss in the MemTable, so the query returns no results.

Affected versions:

V1.1 to V1.1.31

Fixed versions:

V1.1.32 and later

Upgrade to a fixed version.

P1

The truncate command fails if the table name contains uppercase letters, with a "table not found" error. For example, running TRUNCATE "Abc"; reports the error: ERROR: relation "abc" does not exist.

The case-sensitivity logic for the truncate command is incorrect.

Affected versions:

V1.1.30 and earlier

Fixed versions:

V1.1.31 and later

Upgrade to a fixed version.

P1

Using the to_char, to_date, or to_timestamp function fails with the error: time after 2282 not supported.

The functions to_char, to_date, and to_timestamp support the time range from 1925 to 2282. An error is reported if the time is outside this range.

Affected versions:

V1.1.30 and earlier

Fixed versions:

V1.1.31 and later

Upgrade to a fixed version. After the upgrade, you can use a Grand Unified Configuration (GUC) parameter to expand the supported time range, as shown in the following examples.

  • set hg_experimental_functions_use_pg_implementation = 'to_char';

  • set hg_experimental_functions_use_pg_implementation = 'to_date';

  • set hg_experimental_functions_use_pg_implementation = 'to_timestamp';

P1

An inner join query returns fewer results than expected.

The join operator requires data with the same join key to be distributed to the same worker node. However, the optimizer incorrectly infers data distribution, shuffling data with the same key to different nodes. This results in an incorrect join and fewer rows being returned than expected.

Affected versions:

V1.1.30 and earlier

Fixed versions:

V1.1.31 and later

Upgrade to a fixed version.

P1

A SQL query fails with the error: Query could not generate plan by Hologres : PlStmt Translation: Attribute number 4 not found in project list.

Performing a table join without a join key causes the execution plan generation to fail.

Affected versions:

V1.1 to V1.1.27

Fixed versions:

V1.1.28 and later

  • Recreate the table and then run the analyze table command.

  • Upgrade to a fixed version.

P1

Using the get_json_object function fails with the error: Column column0 should be non-nullable but the values contain 1 nulls.

The two parameters of the get_json_object function are defined as non-nullable, but the underlying user-defined function (UDF) can return a null result. This mismatch causes the non-nullable check to fail during execution plan generation.

Affected versions:

V1.1.27 and earlier

Fixed versions:

V1.1.28 and later

Upgrade to a fixed version.

P1

A query fails with the error: ERROR: Build query failed: Table group [] FROM table must equals table group [] FROM QO..

During execution plan generation, a DML node requires specific table group information from downstream nodes. However, a downstream node infers a NULL property for the table group, which fails to meet the DML node's requirement and causes an error.

Affected versions:

V1.1.27 and earlier

Fixed versions:

V1.1.28 and later

Upgrade to a fixed version.

P1

Executing the drop table command hangs, and retrying the command causes a sudden CPU spike.

If Auto Analyze is enabled for an instance, Auto Analyze acquires a share_update_exclusive lock. At the same time, Auto Analyze uses a connection, and a new connection loads statistics and acquires an access_shared_lock. If a user runs DROP TABLE during these two steps, the operation hangs.

Affected versions:

V1.1.27 and earlier

Fixed versions:

V1.1.28 and later

  • Enable the Auto Analyze feature only during off-peak hours.

  • Upgrade to a fixed version.

November 2021

Level

Description

Cause

Affected versions

Workarounds

P2 (Optimization)

After an instance restarts, queries for some data return inconsistent results.

When a backend node restarts, it must synchronize its version with other nodes. During this process, the node, having an older version, queries the original data, leading to inconsistent results. The fix prevents a restarted node from serving requests until it is synchronized, ensuring data consistency.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

Upgrade to the latest version.

P2

When importing data from MaxCompute, runningset hg_experimental_foreign_table_split_size = 64; INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_1t ; causes high memory usage or an OOM error. The issue does not occur if the parameter is set to 128.

The system loads all StripesMeta from the metadata, causing high memory usage.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

  • Avoid using theset hg_experimental_foreign_table_split_size = 64; command.

  • Upgrade to the latest version.

P1

When you use the IN operator on a distribution key or primary key, if the IN list contains more than 100 elements, the final result is incorrect.

When theIN list has more than 100 elements, the number of shards after shard pruning is unpredictable. This generates an incorrect execution plan, leading to an incorrect result.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

  • Reduce the number of elements in theIN list to 100 or fewer.

  • Upgrade to the latest version.

P1

When importing data from a foreign table to an internal table by first running aninsert operation followed by adelete on historical data, theinsert statement might retrieve an outdated partition, resulting in zero rows being inserted.

A storage exception during the import process prevents the retrieval of the latest data.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

Upgrade to the latest version.

P1

When a row is very wide and the data size exceeds several hundred MB, a single record can exceed the upper limit of a RECORDBATCH. This outputs a RECORDBATCH with zero rows, which triggers a bug and causes the instance to restart.

The backend incorrectly handles the row count for very wide rows, causing the instance to restart.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

Upgrade to the latest version.

P2

The following error is reported: internal error: string decimal literal can not be tentative.

The SQL statement contains an in expression, for example: SELECT * FROM tbl where col in (1.11, 1.2, 1.333); If the precision of the DECIMAL values in the in expression is inconsistent, the backend compute engine processes the results inconsistently, which causes an error.

Affected:

1.1.24 and earlier.

Fixed:

1.1.26 and later.

  • Use only one data value in the in expression.

  • Upgrade to the latest version.

P2 (Optimization)

The following error is reported: org.postgresql.util.PSQLException: ERROR: Total memory used by all existing queries exceeded memory limitation 20132659200: xxxxx bytes used..

The compute memory of a single node exceeds the 20 GB limit. A single node has a total memory limit of 64 GB, allocated as one-third for computation, one-third for cache, and one-third for metadata.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

Version 1.1.24 introduces elastic memory adjustment. The backend detects a node's memory usage and adjusts the compute memory size to alleviate the 20 GB limit. If the error persists, optimize the SQL statement or scale out the instance.

P1

The following error is reported: ERROR: Query could not generate plan by Hologres : Query Translation: No attribute entry found due to incorrect normalization of query.

In the executed SQL statement, the selected column is not in theGROUP BY clause, but the primary key is a subset of theGROUP BY clause. The query fails to generate a plan, resulting in an error.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

Upgrade to the latest version.

P1

Writing multiple duplicate data entries to a binary log table in a single operation using Flink or Holo Client causes the loss of binary logs for intermediate entries.

When writing duplicate data to a binary log table, the backend executor generates a binary log only for the final data entry, ignoring the others.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

Upgrade to the latest version.

P0

When you query a MaxCompute foreign table that has a DECIMAL data type, the values in the last two rows change randomly between queries.

When directly reading ORC format data from MaxCompute, if the file contains a DECIMAL type, the DECIMAL statistics read by Hologres are random during storage optimization.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

Upgrade to the latest version.

P1

The following error is reported: Remote seek with parameters is not supported.

The sort operator has the rewindable property by default, but the underlying layer does not support it. An error is reported when the query generates a plan.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

Upgrade to the latest version.

P1

In Hologres V1.1, a resource group is set, but an OOM error occurs when you run a query. The error message is: used by all existing queries exceeded memory limitation. Even when no queries are active, querying system views for slow or active queries also triggers an OOM error.

A memory leak, potentially caused by an exception, can lead to the query engine's (QE) memory usage exceeding its threshold. As a result, new queries are blocked for exceeding the resource group quota.

Affected:

1.1 to 1.1.23.

Fixed:

1.1.24 and later.

  • Recreate the resource group.

  • Upgrade to the latest version.

P2

The following error is reported intermittently: fail to setremoteost invalid remon ip.

A backend process checks the IP whitelist variable before it is initialized, intermittently causing an error.

Affected:

1.1.23 and earlier.

Fixed:

1.1.24 and later.

  • Retry the operation.

  • Upgrade to the latest version.

P1

When you runAnalyze orauto analyze on a table, if the table contains column names that are the same but have different cases, the following error is reported: CheckSchema failed.

The frontend node incorrectly identifies the column ordinal number during the transformation from the optimized tree structure to the PowerBuilderTree, causing an error.

Affected:

1.1.22 and earlier.

Fixed:

1.1.23 and later.

Upgrade to the latest version.

P1

When you run an SQL statement with a multi-tableRightOuterJoin, the query returns only one row without alimit clause. After you add alimit clause, multiple duplicate rows appear.

When implementing aRightOuterJoin, the optimizer generates an incorrect plan, causing duplicate data in the result set.

Affected:

1.1.22 and earlier.

Fixed:

1.1.23 and later.

Upgrade to the latest version.

P1

In a case when statement, when a TEXT field is used as a parameter for both group by and agg, a plan cannot be generated, and the following error occurs: ERROR: Query could not generate plan by Hologres : PlStmt Translation: Attribute number 46046320 not found in project list.

In the case when statement, the colref of the agg parameter field cannot be found, which prevents the plan from being generated.

Affected:

1.1.22 and earlier.

Fixed:

1.1.23 and later.

Upgrade to the latest version.

P1

The following error is reported: ERROR: internal error: Writing column: item_emb with array size: 682790219 violates fixed size list (32) constraint declared in schema.

The storage engine (SE) fails to correctly handle the const array optimization, causing an execution error.

Affected:

1.1 to 1.1.21.

Fixed:

1.1.22 and later.

Upgrade to the latest version.

P0

When you use theinsert on conflict do update set statement, if the subquery in the statement assigns values from multiple rows to a single row, for example, SET(mes1, mes2) = (SELECT mes1, mes2 FROM insert_on_conflict_do_update_negative_source), the instance restarts.

The syntax of assigning values from multiple rows to a single row in a subquery generates a multi-expression parameter. The transformation process fails to add the required column id information to this parameter, causing the instance to restart.

Affected:

1.1.21 and earlier.

Fixed:

1.1.22 and later.

Upgrade to the latest version.

P2

Multiplying DECIMAL data results in the following error: code: kActorInvokeError msg: "HGERR_code 22003 HGERR_msge numeric field overflow HGERR_detl A field with precision 38, scale 36 must round to an absolute value less than 10^2. HGERR_ctxt HGERR_erno 2 HGERR_end" err_data { filename: "FunctionsCast.cc" lineno: 323 funcname: "DecimalOverflowCheck" sqlerrcode: 50331778 message: "numeric field overflow" detail: "A field with precision 38, scale 36 must round to an absolute value less than 10^2." context: ".

Multiplying fields of DECIMAL type, for example, numeric(38, 18) by numeric(38, 18), results in numeric(38, 36). The increased number of decimal places can cause an overflow, triggering an error.

Affected:

1.1.21 and earlier.

Fixed:

1.1.22 and later.

  • Use theround function.

  • Upgrade to the latest version.

September-October 2021

Priority

Description

Cause

Affected/fixed versions

Workaround

P0

The following error occurs: "database is not accepting commands to avoid wraparound data loss in database ""template0"".

The backend assigns an auto-incrementing transaction id to each query. On an instance with high QPS, the ID can exceed the integer limit, triggering the error.

Affected versions:

V0.10.19 to V0.10.42

Fixed versions:

V1.1 and later

Upgrade to a newer version.

P1

Partial column updates to a table intermittently cause the following error: internal error: Record batch has 519 rows but length of columns is 7407.

A field contains a TEXT[] array. The implementation does not correctly apply the slice() operation to the inner array, resulting in an incorrect length. Consequently, when the reverse() command is executed, it attempts to access an invalid index of -1, causing an error.

Affected versions:

V0.10.41

Fixed versions:

V0.10.42 and later

  • As a temporary workaround, run the set hg_experimental_skip_mem_table=on command.

  • Upgrade to a newer version.

P1

When using hg_create_table_like to create a row-oriented table, inserting data into the table causes the following error: ERROR: internal error: Cannot find index full ID: 51539607554 (table id: 12, index id: 2) in storages or it is deleting!.

This issue occurs when a row-oriented table has a composite primary key (a primary key with multiple columns). To retrieve these key columns, hg_create_table_like is executed multiple times. The columns are then added to a Set, which does not preserve their original order.

Affected versions:

V0.10.42

Fixed versions:

V0.10.45 and later

  • Manually execute the CREATE TABLE statement to create the row-oriented table.

  • Upgrade to a newer version.

P2

Deleting a partition causes the following error: FAILED: ERROR: query id[27xxxxxxxxxxxxxx37] SE object lock failed.

When deleting a partition, the backend unexpectedly terminates the query, causing this error.

Affected versions:

V0.10.41 and earlier

Fixed versions:

V0.10.42 and later

  • Do not perform any operations on the table.

  • Contact support to restart the instance.

  • Upgrade to a newer version.

P2

Querying or writing data causes the following error: ERROR: internal error: Invalid table id : 641 MDTableGroup.

This error typically occurs after a Data Definition Language (DDL) operation completes but while the backend nodes are still restarting. Executing a Data Manipulation Language (DML) operation during this time can cause version mismatches between nodes, triggering the error.

Affected versions:

V1.1.18 and earlier

Fixed versions:

V1.1.19 and later

  • Retry the operation after a short delay.

  • Upgrade to a newer version.

August 2021

Level

Description

Cause

Affected and fixed versions

Workaround

P1

If you enable Hologres binlog for a table and set a short binlog TTL during creation, the table's stored data grows continuously even when the business data volume does not increase.

The binlog TTL specified during table creation does not take effect. Instead, the system uses the default value of 100 years.

Affected version:

V0.10

Fixed version:

V1.1

  • Manually change the binlog TTL of the table to a smaller value by running call set_table_property('schema.table', 'binlog.ttl', '86400');.

  • Upgrade to V1.1 or a later version.

P1

Frequent UPDATE, DELETE, and INSERT ON CONFLICT operations on a column-oriented table cause storage space to grow continuously.

To improve efficiency, Hologres uses a mark-delete algorithm. When the ratio of marked records in a file reaches a certain threshold, Hologres triggers a background compaction process to reclaim space. A defect in Hologres prevents this process from starting in some cases.

Affected versions:

Versions earlier than V0.10.25

Fixed versions:

V0.10.25 and later

Upgrade to the latest version.

P1

When writing data to a table in real time by using Flink or Data Integration, a concurrent query on the table reports the following error: ERROR: internal error: Record batch has 742 rows but length of columns is 749. columns=[ColumnHandle(type=string)(table_column_id=3), ColumnHandle(type=string)(table_column_id=4), ColumnHandle(type=string)(table_column_id=5)].

During real-time writes, data is first written to a MemTable and then flushed to disk. If a query runs during this process, the column marker length and the actual data length are not aligned, which causes the query to fail.

Affected version:

V0.10.41

Fixed versions:

V0.10.42 and later

Upgrade to the latest version.

P1

Memory usage suddenly increases even though the business workload does not increase.

If your SQL statement includes one or more of the following functions, a memory leak can occur and cause a sudden increase in memory usage:

  • extract(xxx FROM time)

  • extract(xxx FROM interval)

  • date_part(xx, interval)

Affected versions:

Versions earlier than V0.10.31

Fixed versions:

V0.10.32 and later

  • Do not use the listed functions.

  • Upgrade to the latest version.

P2

The following error is reported: time before epoch time not supported.

This issue occurs if an SQL statement uses one or more of the functions to_char, to_date, and to_timestamp and the data includes dates before 1970. Affected versions of Hologres did not support dates before 1970.

Affected versions:

V0.10 and earlier

Fixed version:

V1.1

  • Filter out data from before 1970.

  • Upgrade to the latest version, which supports data from 1925 to 2282.

P2

When a non-superuser runs the SELECT hg_dump_script('xxxx') function, the following error is reported: ERROR: permission denied for table pg_subscription .

hg_dump_script indirectly calls the pg_subscription relation, but pg_subscription may contain sensitive information. By default, only a superuser can access this table.

Affected version:

V0.10

Fixed version:

V1.1

  • The pg_subscription relation does not store information that is useful to hg_dump_script. This issue is resolved in V1.1 by changing the default behavior.

  • If you encounter a permission issue, grant the current user access to the pg_subscription table.

P2

An SQL statement that contains a left join returns a single row. However, if you add a limit clause to the statement, it returns multiple duplicate rows.

A left join is converted to a right outer join at the underlying layer. When the engine implements the right outer join, it generates an incorrect execution plan where the right side uses broadcast. This causes duplicate rows in the result. You can run explain sql to check whether the execution plan uses broadcast.

Affected versions:

V0.10.40 and earlier

Fixed version:

V1.1

Upgrade to the latest version.

P2

When multiple duplicate records are written to a binlog-enabled table in a single batch, the system loses the binlog records for intermediate data and does not preserve all intermediate state changes.

The engine deduplicates the records and, by default, keeps only the last one, causing the loss of intermediate state changes.

Affected versions:

V0.10.30 and earlier

Fixed versions:

V0.10.39 and later

Upgrade to the latest version.

P2

The following error is reported: ERROR: status { code: SERVER_INTERNAL_ERROR message: " HGERR_code 00000 HGERR_msge OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4 HGERR_end[query_id:xx" err_data { message: "OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4" context: "[query_id:xxx]" } }CONTEXT: [query_id:xx].

This issue occurs if the pattern of a LIKE operator in an SQL statement contains a backslash followed by a letter or digit. Examples:

SELECT * FROM test_tb where a like '%\c%';SELECT * FROM test_tb where a like '%F\G%';

The engine does not fully support this pattern, which causes the error.

Affected versions:

V0.10.38 and earlier

Fixed versions:

V0.10.39 and later

Upgrade to the latest version.

P2

When you query a row-oriented table by its primary key, the results are inconsistent or the following error is reported: Duplicate keys detected when building hash table.

This issue occurs if the column order of the primary key and the clustering key is inconsistent when the row-oriented table is created. Example:

create table k ( a int, b int, primary key(a, b));call set_table_property('k', 'orientation', 'row');call set_table_property('k', 'clustering_key', 'b,a');

Affected versions:

V0.10.37 and earlier

Fixed versions:

V0.10.38 and later

  • Recreate the table and ensure that the primary key and clustering key have the same column order.

  • Upgrade to the latest version.

P2

If you use data masking in a newly created schema, querying the masked data reports the following error: hg_anon_mask_name(text) doesnt exist.

Hologres creates the data masking function in the public schema, making it unavailable in other newly created schemas.

Affected versions:

V0.10.35 and earlier

Fixed versions:

V0.10.36 and later

  • Use the data masking function only in the public schema.

  • Upgrade to the latest version.

P2

The following error is reported: internal error:string decimal literal can not be tentative.

The IN clause in the SQL statement contains decimal values with different precisions. Example:

SELECT * FROM table where sval in(170344.964,1339107.84);

Affected versions:

V0.10.34 and earlier

Fixed versions:

V0.10.35 and later

  • Modify the SQL statement to ensure that the decimal values in the IN clause have the same precision.

  • Upgrade to the latest version.

July 2021

Level

Description

Cause

Versions

Workaround

P0

When a RoaringBitmap field is configured with dictionary encoding, write operations fail and the instance can no longer be queried.

The RoaringBitmap type does not support dictionary encoding. Forcing this setting breaks the encoding logic, causing persistent write failures.

Affected:

V0.10.24 and earlier.

Fixed:

V0.10.25 and later.

  • Disable dictionary encoding for the RoaringBitmap field.

  • Upgrade to a later version.

P0

Running add comment on tablename is "is comment" in a schema other than the public schema causes write or query operations to hang.

Executing an add comment operation, such as add comment on tablename is "comment", in a schema other than the public schema without specifying the schema name in the SQL statement causes a single node to fail, which in turn causes write/query operations to hang.

Affected:

V0.10.20 and earlier.

Fixed:

V0.10.21 and later.

  • Include the schema name when using the add comment statement: add comment on schema.tablename is "comment".

  • Upgrade to a later version.

P0

Operations fail with the error cannot acquire lock in time.

In earlier versions, DDL statements were locked. High-concurrency query and drop operations on the same table could cause a deadlock on a backend node, hanging all operations on that table.

Affected:

V0.9.22 and earlier.

Fixed:

V0.9.23 and later.

Upgrade to a later version.

P1

Storage space increases linearly even when no new data is written.

Using the insert on conflict do update set pk =pk statement to import data, which results in no actual data changes, triggers an optimization bug, causing linear growth in storage space.

Affected:

V0.10.23 and earlier.

Fixed:

V0.10.24 and later.

  • Run an insert into values statement to trigger a data update. The excess data will be deleted.

  • Upgrade to a later version.

P1

Executing extract XXX FROM timestamptz/timestamp returns the error: time before epoch time not supported.

The EXTRACT function mishandles NULL values in the data.

Affected:

V0.10.20 and earlier.

Fixed:

V0.10.21 and later.

  • Use a filter condition in the SQL statement to filter out NULL values.

  • Upgrade to a later version.

P1

Operations fail with the error cant determine shard id of shard value.

The SQL statement contains a union all clause and the GROUP BY clause contains the distribution key, which leads to an incorrect execution plan and a failure to find the corresponding Shard.

Affected:

V0.10.20 and earlier.

Fixed:

V0.10.21 and later.

Upgrade to a later version.

P1

ERROR: Query could not generate plan by gporca : Group by key is type of unsupported type. not supported

Using a field with a non-exact data type in the GROUP BY clause causes this error.

Affected:

V0.9 and earlier.

Fixed:

A restriction was added in V0.10.

  • Avoid using non-exact data types in the GROUP BY clause.

  • Upgrade to a later version.

P1

Querying a foreign table returns the error: unsupported column type:list.

The error occurs if you add an array column to a MaxCompute table but do not populate it. Subsequent queries against this table from a foreign table will then fail.

Affected:

V0.9.22 and earlier.

Fixed:

V0.9.23 and later.

  • After you add an array column to a MaxCompute table, immediately write data to that column.

  • Upgrade to a later version.

P1

Operations fail with the error: ERROR: internal error: The left child should be column ref, num_children: 1.

Using the varchar type as a clustering key in a query triggers this error.

Affected:

V0.9.24 and earlier.

Fixed:

V0.9.25 and later.

  • Change the varchar column to a TEXT column.

  • Upgrade to a later version.

P2

Error when querying a foreign table: code: SERVER_INTERNAL_ERROR message: "query next FROM foreign table executor failed, Unknown file type: xxx

This issue occurs when a configuration update in the MaxCompute cluster is not synchronized with the foreign table metadata that Hologres uses.

Affected:

V0.10.20 and earlier.

Fixed:

V0.10.21 and later.

There is no workaround. You must restart the instance or upgrade to a later version.