GuessDB(DWS) Distributed key column can‘t be updated in current version

往数据库插入或更新数据时报错,提示分布键不能被更新,错误信息如下所示:GaussDB(DWS) 分布键不允许被更新。

问题现象

往数据库插入或更新数据时报错,提示分布键不能被更新,错误信息如下所示:

ERROR: Distributed key column can't be updated in current version

原因分析

GaussDB(DWS) 分布键不允许被更新。

处理方法

方法一:分布键目前暂不支持更新,直接跳过该报错。

方法二:将分布列修改为一个不会更新的列(8.1.0 版本后,支持调整分布列,以下为示例)。

  1. 查询当前表定义,回显发现该表分布列为 c_last_name。

    select pg_get_tabledef(‘customer_t1’);

  2. 尝试执行更新分布列中的数据提示错误信息。

    update customer_t1 set c_last_name = ‘Jimy’ where c_customer_sk = 6885;

  3. 将该表的分布列修改为不会更新的列,例如 c_customer_sk。

    alter table customer_t1 DISTRIBUTE BY hash (c_customer_sk);

  4. 重新执行更新旧的分布列的数据。更新成功。

    update customer_t1 set c_last_name = ‘Jimy’ where c_customer_sk = 6885;

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 ClickHouse 中创建 DWS 表,需要执行以下步骤: 1. 在 ClickHouse 中创建一个数据库,例如: ``` CREATE DATABASE my_dws_db; ``` 2. 使用以下语法创建 DWS 表: ``` CREATE TABLE my_dws_db.my_dws_table ( partition_key1 data_type1, partition_key2 data_type2, ... partition_keyN data_typeN, clustering_key1 data_type1, clustering_key2 data_type2, ... clustering_keyN data_typeN, column_name1 data_type1, column_name2 data_type2, ... column_nameN data_typeN ) ENGINE = Distributed('cluster_name', 'remote_database', 'remote_table', rand()); ``` 其中,`my_dws_db` 是你在第一步中创建的数据库名称,`my_dws_table` 是你要创建的 DWS 表名称,`partition_key` 是用于分区的键,`clustering_key` 是用于聚簇的键,`column_name` 是表中的列名称,`data_type` 是相应列的数据类型。 `Distributed` 引擎用于将数据分布在多个节点上。`cluster_name` 是 ClickHouse 集群的名称,`remote_database` 是远程集群中的数据库名称,`remote_table` 是远程表的名称,`rand()` 是用于随机选择节点进行查询的函数。 例如,如果你要在名为 `my_cluster` 的 ClickHouse 集群中创建一个名为 `orders` 的 DWS 表,可以执行以下命令: ``` CREATE TABLE my_dws_db.orders ( order_date Date, customer_id UInt32, product_id UInt32, quantity UInt32, price Decimal(10,2) ) ENGINE = Distributed('my_cluster', 'my_remote_db', 'my_remote_table', rand()); ``` 请注意,你需要在远程集群中创建相应的数据库和表,并确保两个集群之间具有连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值