PostgreSQL函数-参数可能为NULL

时间:2018-09-27 17:29:16

标签: postgresql postgresql-9.4

我有一个这样定义的简化函数(删除了许多列和参数):

CREATE OR REPLACE FUNCTION write_no_duplicates(
      IN p_foreign_key BIGINT
    , IN p_write_value TEXT
    , OUT output my_table
)
LANGUAGE plpgsql AS $$
BEGIN
    SELECT *
    INTO STRICT output
    FROM my_table
    WHERE my_table.foreign_key = p_foreign_key
    AND (my_table.write_value = p_write_value
        OR (my_table.write_value IS NULL AND p_write_value IS NULL));
EXCEPTION WHEN NO_DATA_FOUND THEN
    INSERT INTO my_table (foreign_key, write_value)
    VALUES (p_foreign_key, p_write_value)
    RETURNING *
    INTO STRICT output;
END $$;

该功能的目的是写入新行,但防止重复。由于表的大小和宽度,我们没有使用唯一的约束,并且我们不介意写入速度是否较慢。

我的问题分为两个部分:

  • 是否有更好的方法来执行空比较?
  • 是否有更好的方法来确保唯一性?

谢谢您的时间!

0 个答案:

没有答案