我正在忙着编写一个脚本来恢复数据库备份,而且我遇到了一些奇怪的事情。
我有一个table.sql文件,它只包含像
这样的创建表结构create table ugroups
(
ug_code char(10) not null ,
ug_desc char(60) not null
);
我有第二个data.csv文件,它只包含分隔符数据,例如
xyz | dummy data
abc | more nothing
fun | is what this is
然后我有第三个index.sql文件,它只创建索引
create unique index i_ugroups on ugroups
(ug_code);
我使用来自终端的命令,如此
/opt/postgresql/bin/psql -d dbname -c "\i /tmp/table.sql" # loads table.sql
我有一个批处理脚本,可以加载数据,完美运行。然后我使用命令
/opt/postgresql/bin/psql -d dbname -c "\i /tmp/index.sql" # loads index.sql
当我尝试创建唯一索引时,它会给我错误
ERROR: could not create unique index "i_ugroups"
DETAIL: Key (ug_code)=(transfers ) is duplicated.
奇怪的是,当我一起执行table.sql文件和index.sql文件并最后加载数据时,我没有错误,一切正常。
我有什么遗失的吗?为什么不能让我在加载数据后创建唯一索引?
答案 0 :(得分:0)
您的列ug_code
中有两行数据" transfer"这就是它无法创建索引的原因。
如果你首先创建索引,为什么它会成功,我不知道。但我怀疑它第二次尝试插入"转移"在数据库中,它只是失败insert
那个时间,并且其他数据成功插入。