我正在使用 Yesod 和 Persistent 创建博客(真的很原创,是吗?)。
在某些时候,我更改了模型,Persistent 说我尝试做的事情不安全,我必须手动进行。它说:
Database migration: manual intervention required.
The following actions are considered unsafe:
ALTER TABLE "article" DROP COLUMN "date";
所以我继续在 Postgres 中运行它。事实上,我已经删除了表“article”,我得到了错误:
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 恢复同步?
最佳答案
请将您的创建表代码更改为:
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 代替。
关于postgresql - Haskell 持久不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004528/