首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对Hasura进行postgres数据备份

如何对Hasura进行postgres数据备份
EN

Stack Overflow用户
提问于 2018-02-07 10:21:46
回答 3查看 4.9K关注 0票数 11

我想把数据的pg_dump从HasuraDB带到我的本地机器。建议的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-07 11:10:23

选项1:

在Postgres容器上执行pg_dump命令:

代码语言:javascript
复制
pg_dump -U username -d dbname > data.sql

实际上,您可能只需要数据,而不需要hasura元数据或schema_migration信息。这是一个更好的“数据导出”类型命令:

代码语言:javascript
复制
pg_dump -U username -d dbname --data-only --schema public > data.sql

备选方案2:

如果Postgres作为Docker容器运行:

代码语言:javascript
复制
# 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
票数 13
EN

Stack Overflow用户

发布于 2019-08-19 08:42:24

Hasura有一个默认启用的pgdump API命令。以下是文档:https://docs.hasura.io/1.0/graphql/manual/api-reference/pgdump.html

文档目前缺少的就是一个例子。下面是一个示例,用于转储Hasura数据,但不是模式(它来自迁移),以便将其导入本地托管的dev hasura (假设您使用了hasura-admin-secret,或者根据需要用其他标头替换):

代码语言:javascript
复制
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
票数 9
EN

Stack Overflow用户

发布于 2022-01-31 01:20:57

2022: Hasura诉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

上面添加了一个标头来指定Hasura管理秘密:

代码语言:javascript
复制
x-hasura-admin-secret:<your admin secret key>

-d为pg_dump &Hasura的端点处理程序添加了一个带有选项("opts")的JSON主体:

代码语言:javascript
复制
{
  "opts": ["-a", "-O", "-x", "--inserts", "--exclude-schema=hdb_catalog"],
  "clean_output": true,
  "source": "default"
}

以上pg_dump选项("opts")如下:

  • -a:仅数据,而不是模式
  • -O:没有所有权声明
  • -x:没有访问特权语句
  • --inserts:使用SQL语句,而不是psql命令
  • --exclude-schema=hdb_catalog:没有与Hasura迁移/元数据相关的记录,只有我们的数据

clean_output键/值从转储输出中移除一组SET语句和注释,如:

代码语言:javascript
复制
--
-- 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语句。

这可以直接复制/粘贴到Hasura控制台的data > SQL选项卡中,并运行以导入转储数据。

参考资料/有用链接

备注

我需要pg_dump作为种子数据在应用Hasura迁移时使用,从旧实例到新的Hasura实例。但是(在我的例子中),Hasura对旧实例的初始迁移输出包括一组hdb_catalog create语句,这将确保在将迁移应用到新的Hasura实例时失败。( hdb_catalog模式/表已经存在于新的/新的Hasura安装中)

为了纠正这一点,我需要对旧实例进行复位偏移并重新执行迁移命令(如前面的链接所示)。这个新的迁移输出不包括hdb_catalog模式,可以将OK应用于新的Hasura实例。

然后,我可以在新实例的Hasura选项卡/窗口中运行pg_dump输出来重新填充我的表。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48661277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档