2014-04-11 61 views
1

我正在使用Yesod和Persistent來創建一個博客(真正的原創,呃?)。Haskell持久性不同步

在某些時候,我改變了我的模型,Persistent說我試圖做的事情是不安全的,而且我必須手動完成。它說:

Database migration: manual intervention required. 
The following actions are considered unsafe: 

    ALTER TABLE "article" DROP COLUMN "date"; 

所以我繼續前進,並在Postgres中運行。事實上,我已經取得了進展,並刪除的表「文章」,我得到的錯誤:

Migrating: CREATe TABLE "article" 
     ("id" SERIAL PRIMARY KEY UNIQUE, 
     "title" VARCHAR NOT NULL, 
     "author" VARCHAR NOT NULL, 
     "day" DATE NOT NULL DEFAULT DATE, 
     "content" VARCHAR NOT NULL) 

devel.hs: SqlError { sqlState = "42703" 
        , sqlExecStatus = FatalError 
        , sqlErrorMsg = "column \"date\" does not exist" 
        , sqlErrorDetail = "" 
        , sqlErrorHint = "" 
        } 

這裏是架構目前看起來如何(如使用持久定義):

-- Blog Article 
Article 
    title Text 
    author Text 
    day  Day default=DATE 
    content MathJax 

什麼在這裏?我需要做些什麼才能讓Postgres和Persistent重新同步?

回答

1

請改變你創建表的代碼:

digoal=# CREATE TABLE "article" 
     ("id" SERIAL PRIMARY KEY UNIQUE, 
     "title" VARCHAR NOT NULL, 
     "author" VARCHAR NOT NULL, 
     "day" DATE NOT NULL DEFAULT current_date, 
     "content" VARCHAR NOT NULL); 
    CREATE TABLE 

PostgreSQL裏沒有數據的功能,所以你可以使用CURRENT_DATE代替。

0

我回答我自己的問題,因爲digoal的解決方案並不完全正確,但他的主要想法是正確的,所以他應該得到業力。但真正的解決方案太大而不能發表評論。基本上,我在Persistent模式中遇到了問題。正如digoal所說的,Postgres沒有「日期」功能。它確實有'current_date'。所以新的持久性模式看起來像:

-- Blog Article 
Article 
    title Text 
    author Text 
    day  Day default=CURRENT_DATE 
    content MathJax