Postgres - 如果不存在不能在postgresql中工作?

时间:2017-05-05 03:13:08

标签: sql postgresql

我正在构建查询,显然,它不起作用。这是我当前的查询(这是完整的查询)

IF NOT EXISTS(SELECT * FROM invite WHERE uid=$1::uuid) 
BEGIN 
INSERT INTO invite (uid, link) VALUES ($1::uuid, $2::text);
END 
ELSE 
BEGIN 
SELECT * FROM invite WHERE uid=$1::uuid;
END

在我的控制台中,我收到syntax error at or near "IF"

1 个答案:

答案 0 :(得分:0)

代码中的许多错误:

  • plpgsql代码只能从函数返回结果(不是来自DO)
  • IF子句必须具有THEN
  • 你在IF中的每个语句中都不需要BEGIN / END ...那么... ELSE ... END(不是错误也没有意义)

纯SQL可能更好:

WITH q AS (
    SELECT *
      FROM invite
     WHERE uid=$1::uuid
), i AS (
    INSERT INTO invite (uid, link)
    SELECT $1::uuid, $2::text
    WHERE (SELECT count(*) = 0 FROM q)
    RETURNING *
) SELECT * FROM q
UNION SELECT * FROM i