Yesod перенос пользовательских типов данных
У меня есть сущность под названием Пользователь
User
ident Text
...
status Status Default=Claimed
Статус - это тип данных, который я сделал. У меня уже есть строки в моей таблице Postgresql, поэтому я получаю ошибку миграции yesod devel при попытке компиляции
Migrating: ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL
31/Oct/2013:07:17:19 -0500 [Debug#SQL] "ALTER TABLE \"user\" ADD COLUMN \"status\" VARCHAR NOT NULL" [] @(persistent-1.2.2.0:Database.Persist.Sql.Raw ./Database/Persist/Sql/Raw.hs:37:5)
devel.hs: SqlError {sqlState = "23502", sqlExecStatus = FatalError, sqlErrorMsg = "column \"status\" contains null values", sqlErrorDetail = "", sqlErrorHint = ""}
Это было ожидаемо, и я знаю, что теперь я должен пойти в psql и выполнить миграцию самостоятельно. Я думал, что код миграции должен выглядеть следующим образом: ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT Заявлено, но я получаю сообщение об ошибке, сообщив, что столбец Claimed не существует. Как добавить столбец со значением по умолчанию, которое не является текстом или числом?
2 ответа
Что ж, ваш запрос на изменение говорит, что новый тип столбца varchar, поэтому значением по умолчанию будет varchar (String).
ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed'
Я решил проблему сам. Это была только ошибка PostgreSql. Утверждается, что должен быть в одинарных кавычках, как это:
ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed'
В PG одинарные кавычки предназначены для строковых констант, а в двойных кавычках указываются регистрозависимые идентификаторы. В этом случае Claised без кавычек считается идентификатором, поэтому я получил столбец <...> не существует ошибки. Вот документация PostgresSql.