如何根据国外 table 更新另一个 table

How to update another table based on foreign table

我有两个数据库“销售”和“服务”,然后为两个 table 的“销售”数据库(帐户和订单)在服务上创建了一个外部数据包装器,并创建了两个外部 tables 在名为 accounts_sales 和 orders_sales.

的服务上

现在在 order_sales 国外 table,我创建了一个触发器,如果​​任何帐户有任何新订单,记录将插入 service.accounts table但它不工作。下面是代码。

CREATE table sales.accounts
(
  account_id  int,
  account_name text
)

CREATE table sales.order
(
  order_id_id  int,
  order_code   text,
  amount       numeric,
  account-id   int
)

然后在服务环境上为上述table创建了两个外来的table。

CREATE table accounts_sale
    (
      account_id  int,
      account_name text
    )  SERVER sales
        OPTIONS (schema_name 'public', table_name 'accounts');

    CREATE table order_sales
    (
      order_id_id  int,
      order_code   text,
      amount       numeric,
      account-id   int
    ) SERVER sales
        OPTIONS (schema_name 'public', table_name 'orders');

现在我希望在销售环境中生成任何新的销售订单时,应根据 sales.order table 在 service.accounts table 中插入或更新新的帐户条目.

这是我在 order_sales table

上创建的触发器
    CREATE OR REPLACE  FUNCTION set_sales_account_creation()
    RETURNS trigger
    LANGUAGE 'plpgsql'
 
AS $BODY$
BEGIN
        IF TG_OP = 'INSERT' THEN
            v_effective_from        :=  NEW.created_date;
            v_created_by            :=  NEW.created_by;
        ELSE
            v_effective_from        :=  NEW.last_modified_date;
            v_created_by            :=  NEW.last_modified_by;



        END IF;      
        
        IF TG_OP IN ('INSERT') THEN
        
            SELECT COUNT(1) INTO V_COUNT FROM
            ACCOUNTS WHERE SALES_ACCOUNT_ID = NEW.account_id;
            
            IF V_COUNT IS NULL OR V_COUNT  = 0  THEN
            
                INSERT INTO service.accounts
                SELECT
                FROM accounts_sales
                WHERE account_id = new.account_id;
              END IF; 
            END IF;
            RETURN NUll;
            
END;
$BODY$;

但是当我在 Sales.orders table 中插入新订单时,它就不起作用了。

CREATE TRIGGER TRG_ACCOUNT_SYNCUP_SALES
BEFORE INSERT OR UPDATE 
ON service.order_sales
FOR EACH ROW
EXECUTE PROCEDURE set_sales_account_creation();

对于外国 table 的触发器如何工作存在一个根本性的误解。

如果你在数据库 A 中,并且你有一个外部 table 引用数据库 B 中的一个 table,那么 A 中外部 table 上的触发器将触发每当你 运行 DML 语句 针对 A 中的外国 table。如果您修改 B.

中引用的 table,触发器将 不会 触发