PostgreSQL唯一索引错误

时间:2015-02-23 10:56:09

标签: database postgresql indexing backup unique

我正在忙着编写一个脚本来恢复数据库备份,而且我遇到了一些奇怪的事情。

我有一个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文件并最后加载数据时,我没有错误,一切正常。

我有什么遗失的吗?为什么不能让我在加载数据后创建唯一索引?

1 个答案:

答案 0 :(得分:0)

您的列ug_code中有两行数据" transfer"这就是它无法创建索引的原因。

如果你首先创建索引,为什么它会成功,我不知道。但我怀疑它第二次尝试插入"转移"在数据库中,它只是失败insert那个时间,并且其他数据成功插入。