Hasura GraphQL `hdb_catalog` v1 与 v2

Hasura GraphQL `hdb_catalog` v1 vs v2

我正在使用 Hasura v2 引擎(自托管),它能够连接多个数据库。我希望能够通过为 v2 使用单独的元数据数据库来连接 v2 并保持 v1 与同一数据库的连接。

但在尝试了一下之后我无法做到这一点,因为显然 Hasura v2 仍在连接的数据库上使用 hdb_catalog 以及在元数据数据库上使用 hdb_catalog

我看到连接的数据库很少使用 hdb_catalog v2 vs v1。

v1

v2

有谁知道这是否甚至可以存档到 运行 v1 和 v2 Hasura 引擎连接到同一个数据库,v2 将元数据存储在单独的数据库上,以及 hdb_catalog 在非元数据上的用途是什么v2 的已连接数据库?

谢谢!

Hasura V2 仍然在连接的数据库上使用 hdb_catalog 到 运行 其事件触发系统,因为它依赖于数据库本身定义的数据库触发器来运行。因此,您会看到与事件触发器相关的表仍在连接的数据库的 hdb_catalog 中,而其余元数据存储在元数据数据库的 hdb_catalog 中。话虽如此,Hasura V2 仅在定义事件触发器的情况下使用连接的数据库的 hdb_catalog,否则它根本不与之交互,从而允许 Hasura V1 实例与同一数据库一起工作。

总而言之,从 Hasura v2.1.0 (撰写本文时的最新 Hasura 版本) 可以 运行 Hasura V2 实例(有自己的专用元数据数据库)和一个 Hasura V1 实例都连接到同一个数据库 仅当 Hasura V2 实例没有配置事件触发器时。

有几件事我要提一下:

  • 如果将 v2 连接到已连接 v1 的数据库,v2 将升级 hdb_version,这将阻止 v1 启动。 运行 v1 版本仍会出现一堆控制台错误,主要是由于事件日志表被更改。
  • V2 正在更改事件日志表的结构,因此它可能与 v1 不兼容。
  • 如果将 v1 连接到具有 v2 连接的数据库,由于上述事件日志表不兼容,它将无法启动。

所以总的来说,虽然将 v1 和 v2 连接到同一个数据库在技术上是“可能的”,但存在很多缺点,这使得除了纯粹的好奇探索之外这个解决方案不可行。

但不代表以后不会改变。

希望对您有所帮助。