触发器postgresql到cockroachdb的实现

问题描述 投票:0回答:1

我正在尝试将用 PostgreSQL 编写的数据库迁移到 cockroachDB 我想知道是否有办法在 cockroachDB 中实现 SQL 中的触发器。 我知道 cocroachDB 不支持触发器,但我想以不同的方式或解决方案为 cockroachDB 实现触发器功能。

在我在这里写的 postgresql 示例触发器中

CREATE OR REPLACE FUNCTION "public"."distance"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
DECLARE
previous_odometer numeric;
  calculated_distance numeric;
BEGIN
  -- Get the most recent odometer_midnight for the same vehicle prior to the current download_date
SELECT odometer_midnight INTO previous_odometer
FROM vu_daily_data_activities
WHERE vehicle_id = NEW.vehicle_id
  AND download_date < NEW.download_date
ORDER BY download_date DESC
    LIMIT 1;

-- Calculate the day_distance
IF previous_odometer IS NOT NULL THEN
    calculated_distance := NEW.odometer_midnight - previous_odometer;
    IF calculated_distance < 0 THEN
      NEW.day_distance := 0;  -- Set to 0 if calculated distance is negative
ELSE
      NEW.day_distance := calculated_distance;
END IF;
ELSE
    NEW.day_distance := 0;  -- If no previous record, set day_distance to 0
END IF;

RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
postgresql cockroachdb
1个回答
0
投票

CockroachDB 与 PostgreSQL 或 MySQL 等传统关系数据库不同,它本身不支持数据库触发器。但是,您可以通过实现 CDC、Kafka 来模仿 CockroachDB 中触发器的行为,并编写一个根据您的需要更新表的自定义函数。
应采取的步骤:

  1. 使用
    CREATE CHANGEFEED FOR TABLE ...

  2. 在桌子上启用 CDC
  3. 设置 Kafka 并创建主题
  4. 设置 Kafka Consumer 来处理更改(使用 python、.net、java 或您喜欢的任何其他语言)
© www.soinside.com 2019 - 2024. All rights reserved.