Sql 如何施加这种排除约束?
我有一个键值表Sql 如何施加这种排除约束?,sql,postgresql,exclusion-constraint,Sql,Postgresql,Exclusion Constraint,我有一个键值表 CREATE TABLE keyvalues ( key TEXT NOT NULL, value TEXT ) 我想施加一个约束,如果一个键有一个空值的条目,它就不能有任何其他条目。 我该怎么做 澄清: 我想允许键1,值1,键1,值2。但是如果我有key2,NULL,我希望不允许key2,value3。您可以使用触发器,如下所示: 创建或替换函数触发器\函数 返回触发器 语言plpgsql 作为$function$ 开始 如果存在,请从keyvalues key=ne
CREATE TABLE keyvalues (
key TEXT NOT NULL,
value TEXT
)
我想施加一个约束,如果一个键有一个空值的条目,它就不能有任何其他条目。
我该怎么做
澄清:
我想允许键1,值1,键1,值2。但是如果我有key2,NULL,我希望不允许key2,value3。您可以使用触发器,如下所示: 创建或替换函数触发器\函数 返回触发器 语言plpgsql 作为$function$ 开始 如果存在,请从keyvalues key=new.key中选择1,并且值为null,然后 引发异常“不允许使用键值”; 如果结束; 归还新的; 终止 $function$ ; 然后在表上创建触发器 在表上创建触发器 在插入或更新之前 关于键值 每行 执行程序触发功能; 并测试它: 插入到键值中 选择“a”,“a” 嗯 插入到键值中 选择“a”和“b” 嗯 插入到键值中 选择“b”,空 嗯 插入到键值中 选择“b”,选择“b”
错误:不允许使用键值Huh?键不为NULL。它不能有NULL值。您将展示一些伪代码来解释您想要实现的目标。我的意思是一个看起来像key,NULL的条目。也就是说,值字段为空。我想允许键1,值1,键1,值2。但是如果我有key2,NULL,我希望不允许key2,value3。因为PostgreSQL支持您可以在插入之前进行探索。如果您有一个键的值,并尝试插入一个具有相同键和NULL值的行,该怎么办?