Home

Awesome

About

This is a tool to migrate data between two Hasura instances through the GraphQL endpoints

The problem

If you are trying to migrate data from an Hasura environment to another that runs in a free tier, you will face issues with the permission level of your Postgres credentials.

For example, if you try to run the COPY command to import the data from a CSV file using the Postgres CLI psql, you will receive this error message:

ERROR: must be a superuser or a member of the pg_read_server_files role to COPY from a file

This error occurs because a free tier instance of Hasura runs in a shared server, which means that the database server, has many other users running their databases, and it's reasonable to you not have a superuser or a different grant on the database server due to security reasons.

Solution

Fetch the data using the GraphQL introspection query to discover the properties/fields of each table/field on GraphQL, and dynamically insert it to the tables using the Hasura insert mutation convention insert_<field_name>

Installing

yarn global add xsura

Commands

copy

Copy the data from an instance of Hasura to another instance of Hasura

xsura copy \
--fields="table_a,table_b" \
--source="https://source.hasura.app/v1/graphql" \
--source-headers="x-hasura-admin-secret|ADMIN_SECRET_KEY" \
--target="https://target.hasura.app/v1/graphql" \
--target-headers="x-hasura-admin-secret|ADMIN_SECRET_KEY"

Options

--fields

GraphQL fields that you want to copy to the target

--source

GraphQL URL of your source server

--source-headers

Headers that you may need to use to authenticate your requests for you source server

--target

GraphQL URL of your target server

--target-headers

Headers that you may need to use to authenticate your requests for you target server