2015-05-14 21 views
1

我想將我的Django項目從使用sqlite3遷移到使用PostgreSQL。我已經創建了該項目的數據庫,但是當我嘗試運行syncdb,我得到以下錯誤:ProgrammingError:列不能自動轉換爲輸入雙精度

django.db.utils.ProgrammingError: column "partial_value" cannot be cast automatically to type double precision 
HINT: Specify a USING expression to perform the conversion. 

列這樣定義模型:

partial_value = models.FloatField() 

我試着尋找類似的問題,但他們似乎更多地關於替換字段類型。

回答

0

我找到了原因爲何字段在首位施加character varying。事實證明,有一個遷移文件就是這樣定義的。通過刪除遷移文件並運行manage.py syncdb修復了該錯誤。

+0

另請參閱:https://stackoverflow.com/questions/30948392/django-1-8-migration-unable-to-cast-column-id-to-integer如果你需要一個不太具體的答案。 – jmny

0

您需要更新'partial_value'列的列的類型。將表的名稱在下面的代碼table_name

ALTER TABLE table_name ALTER COLUMN partial_value TYPE double precision USING (trim(partial_value)::double precision); 
+0

你能解釋爲什麼錯誤首先發生?我檢查了列的類型,它的類型是「字符變化」而不是雙精度。 – manabreak

+0

正如你所說的,前面的列類型是字符,但現在看起來它是float類型的,所以partial_value的數據類型被dajngo改變了,但是這個改變沒有反映到數據庫中,這就是錯誤來臨的原因。 – navyad

+0

不,列類型一直是Django中的FloatField。 PostgreSQL數據庫中的類型是「字符變化」。這是我想知道的事情:爲什麼FloatField轉換爲「字符變化」? – manabreak