postgresql - 实体框架核心 npgsql 迁移改变序列错误
问题描述
我有这样的迁移
migrationBuilder.AlterColumn<int>(
name: "Id",
schema: "{table-schema}",
table: "{table-name}",
nullable: false,
oldClrType: typeof(int))
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn);
它产生一个这样的sql
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '{migration-name}') THEN
ALTER TABLE {table-schema}."{table-name}" ALTER COLUMN "Id" TYPE integer;
ALTER TABLE {table-schema}."{table-name}" ALTER COLUMN "Id" SET NOT NULL;
CREATE SEQUENCE "{table-schema}_Id_seq" AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE;
END IF;
END $$;
其次是
DO $$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '{migration-name') THEN
ALTER TABLE {table-schema}."{migration-name}" ALTER COLUMN "Id" SET DEFAULT (nextval('"{table-name}_Id_seq"'));
ALTER SEQUENCE "{table-name}_Id_seq" OWNED BY "{table-name}"."Id";
END IF;
END $$;
我在迁移过程中收到以下错误:System.Exception: 42P01: relation "{table-name}" does not exist
.
这里有什么问题?
当我手动运行 sql 时,在 ALTER SEQUENCE 行出现错误。我正在使用 npgsql 提供程序 2.1.2 并在 postgresql 9.5 和 11 上都尝试过。
解决方案
推荐阅读
- php - 如何使用 PHP 将文本区域数据从 HTML 文档发送到 MySQL 数据库?
- python - 在TensorFlow中使用lstm按时间序列进行预测,而我的结果可能如此糟糕和荒谬
- android - Flutter - SingleScrollView 不在堆栈/列内滚动
- ios - 如何从 Dev、Test、Staging 和 Prod 环境发送 APNS 推送通知?
- python-3.x - 如何使用此深度优先搜索代码来获得拓扑排序?
- angular - 如何将亚马逊会员服务集成到我的 Angular 应用程序中?
- reactjs - react.js 重定向内部函数
- hive - hive metadatastore 会自动发现新添加的数据吗?
- python - 我的 CSV 数据看起来不错,但是当我绘制图表时,数据似乎不正确
- python - 无法使用原子编辑器运行 linter-flake8