Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何施加这种排除约束?_Sql_Postgresql_Exclusion Constraint - Fatal编程技术网

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值的行,该怎么办?