例如:通过userid
、sdate
、edate
索引
userid sdate edate
001 2019-01-01 2019-01-30
如果我插入新数据,如:
userid sdate edate
001 2019-01-03 2019-01-20
or
001 2019-01-13 2019-02-10
or
001 2019-02-01 2019-02-15
我试着在下面使用GIST,但是如何在冲突中使用?
CREATE EXTENSION btree_gist
CREATE TABLE test(
ID INT PRIMARY KEY NOT NULL,
USERID CHAR(5),
SDATE DATE,
EDATE DATE,
EXCLUDE USING gist
(USERID WITH =,
daterange(SDATE, EDATE, '[]') WITH &&)
);
Insert Into test (usersid, sdate, edate)
Values (@UsersId, @SDate, @EDate)
ON Conflict ON CONSTRAINT test_userid_daterange_excl
Do Update
Set sdate = @SDate, edate = @EDate
我得到了:
ERROR: ON CONFLICT DO UPDATE not supported with exclusion constraints
基于上述情况,我预计如下:
userid sdate edate I_EXPECT
001 2019-01-03 2019-01-20 UPDATE because it is in range
001 2019-01-13 2019-02-10 UPDATE because it is in range
001 2019-02-01 2019-02-15 INSERT because it is not in range
选择版本()显示:
PostgreSQL 10.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
不能使用INSERT。。。在冲突中
使用排除索引,如错误消息所示。
您必须使用文档中的示例43.2中的代码。
在没有接口构建器的情况下创建视图方面,我是新手。我正在使用创建视图! 如何在重用约束之前删除它?
实现SortedSet的Java类除了提供一些其他方法外,还应该提供一个迭代器,以升序迭代其元素。但我认为SortedSet接口规范无法强制执行它指定的这种行为约束。SortedSet只有几个方法,一个实现类可以实现这些方法,而实际上不必满足返回升序迭代器的要求,或者确实不需要有一个有效的比较器。 仅仅查看接口方法而不知道其名称,并不能告诉开发人员实现类应该实现的核心行为。 实现开发人员应该阅读J
我有一张这样定义的桌子 我如何定义排除约束,以便只有一行具有特定
我试图创建一个排除约束,防止有效时间戳范围重叠,但只比较具有相同文本值的记录的范围。我希望文本值比较不区分大小写。我可以将运算符与文本字段一起使用,但不能与字段一起使用,运算符是不可交换的。 这是PostgreSQL 9.5,在数据库上创建了和扩展。 如何不可交换 有没有办法做我想做的事,还是我在做傻事
问题内容: 我正在使用这些注释将数据输入数据库表。我想使userId字段唯一。但是当我这样做时,它向我显示错误 问题答案: 或者,如果它是数据库生成的ID,您也可以执行此操作
问题内容: 我想从表中删除约束。我的查询是: 但我得到一个错误: -您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’constraint ‘ 附近使用正确的语法 问题答案: Mysql具有用于删除外键约束的特殊语法: