小编ser*_*off的帖子

将元素插入表格时,“列引用不明确”

我使用 PostgreSQL 作为我的数据库。我需要在数据库中创建一个条目,如果它已经存在,只需更新其字段,但只有在未设置时才应更新其中一个字段。

我已经使用了这个问题的信息:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null,它与我所拥有的非常相关。

我尝试使用此查询,但是当我运行它时,它会出错Column reference 'affiliate_code' is ambiguous

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(affiliate_code, value3);
Run Code Online (Sandbox Code Playgroud)

(当然,实际值会被替换)。

如果我替换affiliate_code = COALESCE(affiliate_code, value3)affiliate_code = value3,一切正常,但不是我想要的方式。

我怎样才能使这项工作?

这是我的表的定义方式:

CREATE TABLE accounts (
  id VARCHAR NOT NULL UNIQUE,
  token VARCHAR NOT NULL,
  affiliate_code VARCHAR
);
Run Code Online (Sandbox Code Playgroud)

postgresql upsert coalesce

21
推荐指数
2
解决办法
2万
查看次数

在 PostgreSQL 的触发器函数中使用新插入的值

我有这张表:

CREATE TABLE accounts (
  id BIGINT NOT NULL UNIQUE,
  balance INTEGER DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)

我需要在将行插入 2 个不同的表后更新每个用户的余额,transfers并且deposits.

我创建了 2 个函数来计算新用户余额并更新它:

/* function for getting user balance */
CREATE FUNCTION get_balance(bigint) RETURNS bigint
    AS 'SELECT (
  SELECT COALESCE(sum(CASE WHEN won THEN amount * (multiplier - 1) ELSE -amount END), 0)
  FROM transfers
  WHERE user_id = $1
) + (
  SELECT COALESCE(sum(amount), 0)
  FROM deposits
  WHERE user_id = $1
) as sum;'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger functions

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

postgresql ×2

coalesce ×1

functions ×1

trigger ×1

upsert ×1