我有一个这样定义的简化函数(删除了许多列和参数):
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 $$;
该功能的目的是写入新行,但防止重复。由于表的大小和宽度,我们没有使用唯一的约束,并且我们不介意写入速度是否较慢。
我的问题分为两个部分:
谢谢您的时间!