簡體   English   中英

"如何在 Hasura 上進行 postgres 數據備份"

[英]How do I take a postgres data backup on Hasura

我想將我的數據的 pg_dump 從 HasuraDB 帶到我的本地機器。 推薦的方法是什么?

選項 1:

在 Postgres 容器上執行pg_dump命令:

pg_dump -U username -d dbname > data.sql

實際上,您可能只需要數據,而不需要 hasura 元數據或 schema_migration 信息。 這是一個更好的“數據導出”類型命令:

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 ,假設您使用一個,或替換為根據需要使用其他標題):

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:哈蘇拉 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

上面添加了一個標頭來指定您的 Hasura 管理員密碼:

x-hasura-admin-secret:<your admin secret key>

-d為 pg_dump 和 Hasura 的端點處理程序添加了一個帶有選項(“opts”)的 JSON 正文:

{
  "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 語句和注釋,例如:

--
-- 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 控制台的數據 > SQL 選項卡並運行以導入轉儲的數據。

參考/有用的鏈接

筆記

應用 Hasura 遷移時,我需要 pg_dump 作為種子數據,從舊實例到新的 Hasura 實例。 但是(在我的例子中)Hasura CLI 在舊實例上的初始遷移輸出包括一堆hdb_catalog創建模式語句,這將確保在將遷移應用到新的 Hasura 實例時失敗。 (新的/全新的 Hasura 安裝中已經存在 hdb_catalog 模式/表)

為了糾正這個問題,我需要在舊實例上重置遷移並重做遷移命令(如上述鏈接所示)。 這個新的遷移輸出不包括 hdb_catalog 模式,並且可以正常應用於新的 Hasura 實例。

然后我可以在新實例的 Hasura 控制台 SQL 選項卡/窗口中運行 pg_dump 輸出來重新填充我的表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM