首页 > 解决方案 > PostgreSQL 函数 - 可能为 NULL 的参数比较

问题描述

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

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 $$;

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

我的问题有两个部分:

感谢您的时间!

标签: postgresqlpostgresql-9.4

解决方案


推荐阅读