postgres TRIGGER upsert返回

时间:2020-01-23 14:55:15

标签: postgresql plpgsql database-trigger

我想要一个upsert功能来返回该行的(新/现有)id。

链接到我之前的问题。我之前询问过规则postgres create rule on insert do nothing if exists insert otherwise; RETURNING id,但似乎不可能。

所以我诉诸触发器

CREATE OR REPLACE FUNCTION upsert_asset() RETURNS trigger AS $trigger_bound$
BEGIN
    INSERT INTO asset(symbol, name, type, status)
    VALUES (NEW.symbol, NEW.name, NEW.type, NEW.status)
    ON CONFLICT (symbol) DO UPDATE SET symbol = EXCLUDED.symbol;
    RETURN NEW;
END;
$trigger_bound$
LANGUAGE plpgsql;

CREATE OR REPLACE TRIGGER upsert_asset_trigger
AFTER INSERT ON asset
FOR EACH ROW
EXECUTE PROCEDURE upsert_asset();

我对以上内容进行了测试并起作用。所以我的问题是

  1. 这是否触发实现此功能的正确方法?我应该了解的比赛条件/性能问题吗?
  2. 如何通过不给出列名来概括该查询?资产(符号,名称,类型,状态)。我不想每次更换桌子时都注意这个规则。是否可以说NEW。*或column。*之类的?有哪些伪关系可以实现这一目标?请注意,也有一些默认列。那么,如果insert语句将该列留在insert语句中,那么NEW.default_column如何获得一个值?

谢谢

0 个答案:

没有答案
相关问题