postgresql - 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 $$;
该函数的目的是写入一个新行,但防止重复。由于表的大小和宽度,我们没有使用唯一约束,并且我们不介意写入速度是否较慢。
我的问题有两个部分:
- 有没有更好的方法来执行空比较?
- 有没有更好的方法来确保唯一性?
感谢您的时间!
解决方案
推荐阅读
- json - Symfony4 (API) - 尝试使用 request->files->all() 上传文件给我一个空的结果
- ag-grid - AgGrid:如何在运行时动态更改某些列的聚合值?
- android - 如何构建远程协助应用程序?
- spring-boot - Spring Boot 中的 servlet 超时不正确
- javascript - 单击时如何将本地存储添加到列表和网格视图
- c# - MVVM Light - 如何检测某些属性是否已更改
- css - 在保持默认滑动行为的情况下,如何通过移动触摸使 Bootstrap 轮播可缩放/可缩放?
- ssas - 维度的 ProcessUpdate 触发处理多维数据集中所有度量值组的所有分区
- azure-ad-b2c - 在 Azure AD B2C 中的注册过程中收集/上传文件作为自定义属性
- ios - 如何解决 iphone x 上的约束问题?