Postgresql运算符类“varchar_pattern_ops”不接受数据类型整数

时间:2013-11-29 11:19:50

标签: sql django postgresql

我正在尝试将我的数据id postgresql从字符串迁移到django中的整数,以便在sphinx搜索中使用它们。首先,我正在进行数据迁移,将我的数据转换为字符串中的整数,如此

db.execute('''UPDATE the_table SET foo='1' WHERE foo='bar';''')

然后我正在进行架构迁移

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);
像被告知here

一样

但我收到了错误

  

错误:运算符类“varchar_pattern_ops”不接受数据类型整数

     

SQL-состояние:42804

在South和pgAdmin中都会发生此错误。数据是正确的 - 字符串类型为Null或整数。我做错了什么?

2 个答案:

答案 0 :(得分:9)

要处理此问题,您必须使用两个迁移步骤。

首先:在首次迁移时添加db_index=False,然后生成并运行迁移。

第二次:db_index=True更新为模型中的相关列(根据第一步),然后生成迁移并再次运行。

这是基于我在某个项目上的经验,而且有效。

希望它有所帮助。

答案 1 :(得分:5)

我只能像这样重现您的错误消息:

denis=# create index test_idx on test (val varchar_pattern_ops);
CREATE INDEX
denis=# alter table test alter val type int using (val::int);
ERROR:  operator class "varchar_pattern_ops" does not accept data type integer

如果您有类似的时髦索引,请尝试删除并重新创建它:

denis=# drop index test_idx;
DROP INDEX
denis=# create index test_idx on test (val);
CREATE INDEX
denis=# alter table test alter val type int using (val::int);
ALTER TABLE

相关文档:

http://www.postgresql.org/docs/current/static/indexes-opclass.html