Postgresql运算符类“;varchar“U模式”操作;不接受整型数据类型
我正在尝试将数据id postgresql从字符串迁移到django中的整数,以便在sphinx搜索中使用它们。首先,我要进行数据迁移,将数据转换成字符串中的整数,如下所示Postgresql运算符类“;varchar“U模式”操作;不接受整型数据类型,sql,django,postgresql,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); 就像别
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\u pattern\u ops”不接受数据类型integer
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
相关文件:
要解决此问题,您必须使用两个迁移步骤 首先:在第一次迁移时添加
db_index=False
,然后生成并运行迁移
第二步:将db_index=True
更新到模型中的相关列(根据第一步),然后生成迁移并再次运行
这是基于我在某个项目上的经验,它是有效的
希望有帮助。哪个版本的postgres?它在9.3中运行良好:
altertable test alter val type int使用(val::int)代码>9.1.10。我不明白-另一列是同一个表,刚刚转换为整数,没有错误。但此列仍会导致错误。是的,这解决了问题!非常感谢。完美,应该是可以接受的答案,因为它不包含SQL。我尝试过这个,但对于我的特定用例,ForeignKey
是PostgreSQL中的字符变化
,而不是uuid
,它没有重新生成正确的迁移文件来更新列转换。我必须编写纯SQL。不过我觉得不太好,我很惊讶。我认为迁移不应该进入那种状态。