我需要使用由bigint数据类型和日期时间数据类型组成的复合键或唯一索引。但是,我注意到日期时间的秒元素已四舍五入到最接近的分钟,并在尝试导入数据集时导致重复的密钥违规。
数据集本质上是事务性数据,因此我们的ID(存储在bigint字段中)将被重复,因此需要在唯一键中包含datetime字段。
举一个例子:以下两行会导致一个重复的键行'错误:
ID字段(bigint)| ActionDate(日期时间)
--------------------- | --------------------------
1050000284002 | 2016-01-08 15:51:24.000
1050000284002 | 2016-01-08 15:50:35.000
值明显不同(并且正确存储在数据库中),但错误显示:
The duplicate key value is (1050000284002, Jan 8 2016 3:51PM).
(值得补充的是,我最初创建了一个复合键,然后用一个唯一索引替换它;上面列出的错误是在索引到位的情况下生成的。)
我的问题是:
答案 0 :(得分:1)
如果您正在使用表单的索引(列A,B上的索引)而不是公式索引(列A + B上的索引),那么不,一列的数据类型对内容没有影响另一个。
根据您的描述,我会检查以下内容:
基于您的修改的进一步建议:
如果您要导入的数据明确包含唯一的日期时间值,但SQL未识别唯一的日期值,那么数据导入过程就会出现问题。
尝试将您的数据加载到表中,而不使用索引。它加载吗?它是否与您的源数据匹配到毫秒?现在,在加载数据的情况下,创建索引(主键,唯一约束,等等)。这会失败吗?重复数据来自哪里?简而言之,搞乱数据和加载过程,看看有什么不妥。
答案 1 :(得分:0)
当我这样做时:
#!/bin/bash
#
# chkconfig: 3 80 20
# description: boop-logstash-forwarder
#
# Get function from functions library
. /etc/init.d/functions
# Start the service
LOGSTASH_FORWARDER="/logiciels/logstash-forwarder/logstash-forwarder"
LF_CONF="/appli/projects/BOOP-LOGSTASH-FORWARDER/logstash-forwarder.conf"
SERVICE_NAME="boop-logstash-forwarder"
start() {
initlog -c "echo -n Starting $SERVICE_NAME: "
$LOGSTASH_FORWARDER -config=$LF_CONF &
### Create the lock file ###
touch /var/lock/subsys/$SERVICE_NAME
success $"$SERVICE_NAME startup"
echo
}
# Restart the service
stop() {
initlog -c "echo -n Stopping $SERVICE_NAME: "
killproc $SERVICE_NAME
### Now, delete the lock file ###
rm -f /var/lock/subsys/$SERVICE_NAME
echo
}
### main logic ###
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $SERVICE_NAME
;;
restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
我得到: 2016-10-17 09:47:05.753
Stopping looping-logstash-forwarder: [FAILED]
请注意,第一个结果是日期加25天。所以日期的整数部分没有下降(否则它将是日期的午夜......)。
第二个选择会丢弃小数点后的所有内容....