如何在 Hasura 上进行 postgres 数据备份
How do I take a postgres data backup on Hasura
我想将我的数据从 HasuraDB 中提取 pg_dump 到我的本地计算机。推荐的方法是什么?
选项 1:
在您的 Postgres 容器上执行 pg_dump
命令:
pg_dump -U username -d dbname > data.sql
实际上,您可能只需要数据而不是 hasura 元数据或 schema_migration 信息。这是一个更好的 'data export' 类型命令:
pg_dump -U username -d dbname --data-only --schema public > data.sql
选项 2:
如果 Postgres 运行 作为 Docker 容器:
# Exec into the postgres container
$ docker exec -ti <postgres-id> -- /bin/bash
# Run pg_dump
root@postgres-3391217220-t7bbc:/$ pg_dump -U postgres -d postgres --data-only --schema public > db.sql
^D
# Back on your local machine, copy the dump
$ docker cp <postgres-id>:/db.sql db.sql
Hasura 有一个 pgdump
API 命令,默认启用。以下是文档:https://docs.hasura.io/1.0/graphql/manual/api-reference/pgdump.html
文档目前缺少的是示例。这是我用来转储 Hasura 数据的示例,但不是模式(来自迁移),以便将其导入我本地托管的开发 hasura(插入您自己的 hasura-admin-secret
,假设您使用一个,或替换为其他 headers 根据需要):
HASURA_SECRET=som3_Secr3t_Her3
curl -d '{"-Fc", "opts": ["--data-only"]}' -H "x-hasura-admin-secret: $HASURA_SECRET" https://your-host-url.com/v1alpha1/pg_dump > dumpfile
2022:Hasura v.2.1.1
要从 postgres/Hasura 实例导出数据,我们需要使用 Postman 或 curl 客户端对隐藏的 Hasura 端点 /v1alpha1/pg_dump
发出 http POST 请求,如下所示:
http://<your-hasura-host>/v1alpha1/pg_dump
一个例子 curl
命令:
curl -d '{"opts": ["-a", "-O", "-x", "--inserts", "--exclude-schema=hdb_catalog"], "clean_output": true, "source": "default"}' -H "x-hasura-admin-secret:your-admin-secret-here" http://your-hasura-host/v1alpha1/pg_dump
上面添加了一个header来指定你的Hasura管理员密码:
x-hasura-admin-secret:<your admin secret key>
并且 -d
为 pg_dump 和 Hasura 的端点处理程序添加了 JSON body 和选项(“opts”):
{
"opts": ["-a", "-O", "-x", "--inserts", "--exclude-schema=hdb_catalog"],
"clean_output": true,
"source": "default"
}
上面的 pg_dump 选项(“opts”)是:
-a
:data-only,不是模式
-O
:无所有权声明
-x
: 无访问权限语句
--inserts
: 使用 SQL 语句,而不是 psql 命令
--exclude-schema=hdb_catalog
: 没有 Hasura migration/metadata 相关记录,只有我们的数据
clean_output
key/value 从转储输出中删除了一堆 SET 语句和注释,例如:
--
-- PostgreSQL database dump
--
-- Dumped from database version 12.4 (Debian 12.4-1.pgdg100+1)
-- Dumped by pg_dump version 13.4 (Debian 13.4-4.pgdg100+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
source
指定要转储的数据库的名称。通常这将是 default
,除非您在设置 Hasura 时更改了它。
您得到的输出应该是一个 SET
语句后跟一堆 INSERT INTO
语句。
这可以 copy/pasted 直接进入 Hasura 控制台的数据 > SQL 选项卡并 运行 导入转储的数据。
References/Useful 链接
- https://www.postgresql.org/docs/13/app-pgdump.html
- https://hasura.io/docs/latest/graphql/core/api-reference/pgdump.html
- https://hasura.io/docs/latest/graphql/core/migrations/advanced/seed-data-migration.html
注释
我需要 pg_dump 作为种子数据以在 applying a Hasura migration 时使用,从旧实例到新的 Hasura 实例。但是(在我的例子中)Hasura CLI 在旧实例上的初始迁移输出包括一堆 hdb_catalog
创建模式语句,这将确保在将迁移应用到新的 Hasura 实例时失败。 (hdb_catalog schema/tables 已经存在于 new/fresh Hasura 安装中)
为了纠正这个问题,我需要在旧实例上 reset migrations 并重做迁移命令(如前面提到的 link 所示)。这个新的迁移输出不包括 hdb_catalog 模式,并且可以正常应用于新的 Hasura 实例。
然后我可以在新实例上 运行 Hasura 控制台 SQL tab/window 中的 pg_dump 输出来重新填充我的表。
我想将我的数据从 HasuraDB 中提取 pg_dump 到我的本地计算机。推荐的方法是什么?
选项 1:
在您的 Postgres 容器上执行 pg_dump
命令:
pg_dump -U username -d dbname > data.sql
实际上,您可能只需要数据而不是 hasura 元数据或 schema_migration 信息。这是一个更好的 'data export' 类型命令:
pg_dump -U username -d dbname --data-only --schema public > data.sql
选项 2:
如果 Postgres 运行 作为 Docker 容器:
# Exec into the postgres container
$ docker exec -ti <postgres-id> -- /bin/bash
# Run pg_dump
root@postgres-3391217220-t7bbc:/$ pg_dump -U postgres -d postgres --data-only --schema public > db.sql
^D
# Back on your local machine, copy the dump
$ docker cp <postgres-id>:/db.sql db.sql
Hasura 有一个 pgdump
API 命令,默认启用。以下是文档:https://docs.hasura.io/1.0/graphql/manual/api-reference/pgdump.html
文档目前缺少的是示例。这是我用来转储 Hasura 数据的示例,但不是模式(来自迁移),以便将其导入我本地托管的开发 hasura(插入您自己的 hasura-admin-secret
,假设您使用一个,或替换为其他 headers 根据需要):
HASURA_SECRET=som3_Secr3t_Her3
curl -d '{"-Fc", "opts": ["--data-only"]}' -H "x-hasura-admin-secret: $HASURA_SECRET" https://your-host-url.com/v1alpha1/pg_dump > dumpfile
2022:Hasura v.2.1.1
要从 postgres/Hasura 实例导出数据,我们需要使用 Postman 或 curl 客户端对隐藏的 Hasura 端点 /v1alpha1/pg_dump
发出 http POST 请求,如下所示:
http://<your-hasura-host>/v1alpha1/pg_dump
一个例子 curl
命令:
curl -d '{"opts": ["-a", "-O", "-x", "--inserts", "--exclude-schema=hdb_catalog"], "clean_output": true, "source": "default"}' -H "x-hasura-admin-secret:your-admin-secret-here" http://your-hasura-host/v1alpha1/pg_dump
上面添加了一个header来指定你的Hasura管理员密码:
x-hasura-admin-secret:<your admin secret key>
并且 -d
为 pg_dump 和 Hasura 的端点处理程序添加了 JSON body 和选项(“opts”):
{
"opts": ["-a", "-O", "-x", "--inserts", "--exclude-schema=hdb_catalog"],
"clean_output": true,
"source": "default"
}
上面的 pg_dump 选项(“opts”)是:
-a
:data-only,不是模式-O
:无所有权声明-x
: 无访问权限语句--inserts
: 使用 SQL 语句,而不是 psql 命令--exclude-schema=hdb_catalog
: 没有 Hasura migration/metadata 相关记录,只有我们的数据
clean_output
key/value 从转储输出中删除了一堆 SET 语句和注释,例如:
--
-- PostgreSQL database dump
--
-- Dumped from database version 12.4 (Debian 12.4-1.pgdg100+1)
-- Dumped by pg_dump version 13.4 (Debian 13.4-4.pgdg100+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
source
指定要转储的数据库的名称。通常这将是 default
,除非您在设置 Hasura 时更改了它。
您得到的输出应该是一个 SET
语句后跟一堆 INSERT INTO
语句。
这可以 copy/pasted 直接进入 Hasura 控制台的数据 > SQL 选项卡并 运行 导入转储的数据。
References/Useful 链接
- https://www.postgresql.org/docs/13/app-pgdump.html
- https://hasura.io/docs/latest/graphql/core/api-reference/pgdump.html
- https://hasura.io/docs/latest/graphql/core/migrations/advanced/seed-data-migration.html
注释
我需要 pg_dump 作为种子数据以在 applying a Hasura migration 时使用,从旧实例到新的 Hasura 实例。但是(在我的例子中)Hasura CLI 在旧实例上的初始迁移输出包括一堆 hdb_catalog
创建模式语句,这将确保在将迁移应用到新的 Hasura 实例时失败。 (hdb_catalog schema/tables 已经存在于 new/fresh Hasura 安装中)
为了纠正这个问题,我需要在旧实例上 reset migrations 并重做迁移命令(如前面提到的 link 所示)。这个新的迁移输出不包括 hdb_catalog 模式,并且可以正常应用于新的 Hasura 实例。
然后我可以在新实例上 运行 Hasura 控制台 SQL tab/window 中的 pg_dump 输出来重新填充我的表。