PostgreSQL:测试用户是否存在否则创建新用户返回他的ID

PostgreSQL: test if user exists else create new user returning his id

我正在尝试创建满足以下条件的查询:

给定用户名和电子邮件地址,

到目前为止我有以下功能:

CREATE OR REPLACE FUNCTION add_user
  (character varying(40), character varying(255), character(60))
RETURNS integer
AS $body$
DECLARE
  id record;
BEGIN
  IF EXISTS(SELECT 0 FROM user_account WHERE username =  AND email_address = )
  THEN RETURN 3;
  ELSEIF EXISTS(SELECT 0 FROM user_account WHERE username = )
  THEN RETURN 1;
  ELSEIF EXISTS(SELECT 0 FROM user_account WHERE email_address = )
  THEN RETURN 2;
  ELSE FOR id IN INSERT INTO user_account (username, email_address, hash) values (, , ) RETURNING user_id
       LOOP
         RETURN id;
       END LOOP;
  END IF;
  RETURN 0;
END;
$body$
LANGUAGE plpgsql
VOLATILE

是否有更优雅的方法来实现此目的而无需经历声明记录和循环的麻烦?

您不需要循环,只需将 INSERT ... RETURNING 的结果存储到您的变量中即可;

declare 
  id integer; -- use an integer variable
begin
    ...
    ELSE 
       INSERT INTO user_account (username, email_address, hash) values (, , ) 
       RETURNING user_id 
       INTO id; --<< here
       return id;
    END IF;
end;