Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql运算符类“;varchar“U模式”操作;不接受整型数据类型_Sql_Django_Postgresql - Fatal编程技术网

Postgresql运算符类“;varchar“U模式”操作;不接受整型数据类型

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); 就像别

我正在尝试将数据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\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。不过我觉得不太好,我很惊讶。我认为迁移不应该进入那种状态。