umami 构建时报错# ✗ Command failed: prisma migrate deploy Error: P3009
原因是数据库用的是MySQL 5.7.x版本,umami2.18.1版本用的sql文件语法与MySQL5.7.x的重命名语法略有不同。
决绝不了问题,可以解决提出问的人的,直接将数据库升级到MySQL 8版本就好。
如果不想换库或库里已经有数据换起来麻烦,那我们就修改umami的sql文件。
打开 umami/db/mysql/migrations/02_report_schema_session_data 文件夹下的 migration.sql 文件,将 文件中的首行至第6行
-- AlterTable
ALTER TABLE "event_data" RENAME COLUMN "event_data_type" TO "data_type";
ALTER TABLE "event_data" RENAME COLUMN "event_date_value" TO "date_value";
ALTER TABLE "event_data" RENAME COLUMN "event_id" TO "event_data_id";
ALTER TABLE "event_data" RENAME COLUMN "event_numeric_value" TO "number_value";
ALTER TABLE "event_data" RENAME COLUMN "event_string_value" TO "string_value"
替换为
-- RenameColumns
ALTER TABLE `event_data` ADD COLUMN data_type INTEGER UNSIGNED AFTER event_data_type;
ALTER TABLE `event_data` ADD COLUMN date_value TIMESTAMP(0) AFTER event_date_value;
ALTER TABLE `event_data` ADD COLUMN event_data_id VARCHAR(36) AFTER event_id;
ALTER TABLE `event_data` ADD COLUMN number_value DECIMAL(19, 4) AFTER event_numeric_value;
ALTER TABLE `event_data` ADD COLUMN string_value VARCHAR(500) AFTER event_string_value;
UPDATE event_data
SET data_type = event_data_type,
date_value = event_date_value,
event_data_id = event_id,
number_value = event_numeric_value,
string_value = event_string_value;
ALTER TABLE `event_data` MODIFY data_type INTEGER UNSIGNED NOT NULL;
ALTER TABLE `event_data` MODIFY event_data_id VARCHAR(36) NOT NULL;
ALTER TABLE `event_data` DROP COLUMN event_data_type;
ALTER TABLE `event_data` DROP COLUMN event_date_value;
ALTER TABLE `event_data` DROP COLUMN event_id;
ALTER TABLE `event_data` DROP COLUMN event_numeric_value;
ALTER TABLE `event_data` DROP COLUMN event_string_value;
ALTER TABLE `event_data` ADD PRIMARY KEY(event_data_id);
把出问题的库清理掉,重新构建就可以了
评论区