如何对 Postgres 9.0 数据库进行逆向工程

Posted

技术标签:

【中文标题】如何对 Postgres 9.0 数据库进行逆向工程【英文标题】:How to reverse engineer Postgres 9.0 database 【发布时间】:2022-01-20 14:27:02 【问题描述】:

ASP.NET Core 6 MVC 应用程序使用 EF Core 和 Npgsql。

使用 Postgres 9.0 数据库逆向工程

scaffolder.ScaffoldModel(connectionString.ToString(), dbOpts, modelOpts, codeGenOpts);

抛出异常

Npgsql.PostgresException (0x80004005): 42703: 列“enumsortorder”不存在

在 sql 中

SELECT
  nspname,
  typname,
  array_agg(enumlabel ORDER BY enumsortorder) AS labels
FROM pg_enum
JOIN pg_type ON pg_type.oid = enumtypid
JOIN pg_namespace ON pg_namespace.oid = pg_type.typnamespace
GROUP BY nspname, typname

带有堆栈跟踪

在 Npgsql.Internal.NpgsqlConnector.g__ReadMessageLong|213_0(NpgsqlConnector 连接器,布尔异步,DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage) 在 Npgsql.NpgsqlDataReader.NextResult(布尔异步,布尔 isConsuming, CancellationToken 取消令牌)在 Npgsql.NpgsqlDataReader.NextResult() 在 Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior 行为,布尔值 异步,CancellationToken 取消令牌)在 Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior 行为,布尔值 异步,CancellationToken 取消令牌)在 Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.GetEnums(NpgsqlConnection 连接,DatabaseModel 数据库模型)在 Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(DbConnection dbConnection、DatabaseModelFactoryOptions 选项)在 Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(字符串 connectionString,DatabaseModelFactoryOptions 选项)在 Microsoft.EntityFrameworkCore.Scaffolding.Internal.ReverseEngineerScaffolder.ScaffoldModel(字符串 连接字符串,DatabaseModelFactoryOptions 数据库选项, ModelReverseEngineerOptions 模型选项,模型代码生成选项 代码选项)

如何在 .NET6 中对 Postgres 9.0 数据库进行逆向工程?枚举数据类型几乎不用。

【问题讨论】:

我建议备份数据库并在更高版本的 Postgres 实例上恢复,然后在 Scaffold 上恢复。不要以为 Npgsql 很快就会这样做。 【参考方案1】:

我已经为 6.0.2 修复了这个问题,请参阅 https://github.com/npgsql/efcore.pg/issues/2160。

如果您不在 github 和 *** 上交叉发布相同的问题会更好 - 它主要在两个地方创建更多的工作回答。如果某些东西看起来像 Npgsql 错误,并且 issue 应该足够了,否则 *** 适合使用问题等。

【讨论】:

以上是关于如何对 Postgres 9.0 数据库进行逆向工程的主要内容,如果未能解决你的问题,请参考以下文章

关于powerDesigner连接mysql数据库进行逆向工程的问题。

如何防止我的代码进行逆向工程?

如何将 PostgreSQL 数据源添加到 WildFly 9.0?

什么是逆向工程?黑客是如何构建可利用的漏洞?

如何使用 Eclipse Hibernate 工具对启用 PostGIS 的数据库进行逆向工程?

如何在 Postgres 中使用时间戳字段对日期进行分组?