如何创建远程 Hasura 服务器的本地 "copy"?

How to create local "copy" of remote Hasura server?

我想在我的本地机器上设置一个 Hasura 的开发环境,它复制我现有的产品(相同的表、相同的模式、相同的数据)。

  1. 备份数据库。
  2. 运行 Hasura 与数据库。
  3. 确保 Hasura 元数据已同步。

Hasura 有一个特殊端点用于在 Postgres 实例上执行 pg_dump。

这是一个示例 CURL 请求:

curl --location --request POST 'https://your-remote-hasura.com/v1alpha1/pg_dump' \ --header 'Content-Type: application/json' \ --header 'X-Hasura-Role: admin' \ --header 'Content-Type: text/plain' \ --data-raw '{ "opts": ["-O", "-x","--inserts", "--schema", "public"] }'

它以 psql 格式输出模式和数据。

您可以使用 Postman 等工具方便地导入、测试和 运行 CURL 查询。

请按照 pg_dump 文档调整所需的选项。

即上面的查询使用“--inserts”选项,它在输出中产生 "INSERT INTO" 语句。

可以将输出直接复制、粘贴和导入到 Hasura 面板 SQL 选项卡("COPY FROM stdin" 语句在面板中插入时会导致错误)。

http://localhost:8080/console/data/sql

在导入之前,从查询中注释掉或删除行 CREATE SCHEMA public;,因为它已经存在。

您还必须 select 在执行查询期间或之后跟踪表和关系。

如果数据量较大,使用CLI导入可能会更好

我发现这个过程很有效。

  1. 创建一个干净的空本地 postgresql 数据库和 Hasura 实例。要更新现有的本地数据库,drop it and recreate it.

  2. 从您现有的 Hasura 服务器转储架构和数据(根据 by @protob, but with clean_output set so that manual changes to the output do not have to be made. See pgdump 了解详细信息。

    curl --location --request POST 'https://example.com/v1alpha1/pg_dump' \
      --header 'Content-Type: application/json' \
      --header 'X-Hasura-Role: admin' \
      --header 'Content-Type: text/plain' \
      --header 'x-hasura-admin-secret: {SECRET}' \
      --data-raw '{ "opts": ["-O", "-x","--inserts",  "--schema", "public"], "clean_output": true}' > hasura-db.sql
    
  3. 在本地导入架构和数据:

    psql -h localhost -U postgres < hasura-db.sql
    
  4. 本地数据库有所有迁移,因为我们复制了最新的模式,所以只需将它们标记为已应用:

    # A simple `hasura migrate apply --skip-execution` may work too!
    for x in $(hasura migrate status | grep "Not Present" | awk '{ print  }'); do
      hasura migrate apply --version $x --skip-execution
    done
    
    # and confirm the updated status
    hasura migrate status
    
  5. 现在终于可以使用 hasura CLI 应用 Hasura 元数据了:

    hasura metadata apply
    

享受你的新实例吧!