我使用Yesod和Persistent制作博客(真的很原始,嗯?)。
在某些时候,我改变了我的模型,而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 = ""
}
以下是架构当前的外观(使用Persistent定义):
-- Blog Article
Article
title Text
author Text
day Day default=DATE
content MathJax
这里发生了什么?我需要做些什么才能让Postgres和Persistent重新同步?
答案 0 :(得分: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没有DATA功能,所以你可以改用current_date。
答案 1 :(得分:0)
我回答了我自己的问题,因为Digoal的解决方案并不完全正确,但他的主要想法是正确的,所以他应该得到业力。但真正的解决方案对于评论来说太大了。基本上,我的Persistent模式确实存在问题。正如Digoal所说,Postgres没有' date'功能。它确实有' current_date'。所以新的Persistent架构看起来像:
-- Blog Article
Article
title Text
author Text
day Day default=CURRENT_DATE
content MathJax