我正在尝试将我的数据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);
就像在这里被告知的那样
但是我收到了一个错误
错误:运算符类"varchar_pattern_ops"不接受数据类型整数
SQL-состояние:42804
South和pgAdmin都会发生此错误.数据是正确的 - 字符串类型为Null或整数.我究竟做错了什么?
我只能像这样重现你的错误信息:
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
要处理此问题,您必须使用两个迁移步骤.
第一步:添加db_index=False
第一次迁移,然后生成并运行迁移.
第二步:更新db_index=True
到模型中的相关列(根据第一步),然后生成迁移并再次运行.
这是基于我在某个项目上的经验,而且有效.
希望能帮助到你.