graphql-engine icon indicating copy to clipboard operation
graphql-engine copied to clipboard

cli: allow to track all tables/relationships

Open benoitscherrer opened this issue 6 years ago • 22 comments

When using Hasura with an existing database, it would be super useful to be able to track all tables and all relationship with the cli (instead of having to go in the console in the browser) (eg for scripts or functional tests)

benoitscherrer avatar Jan 20 '19 00:01 benoitscherrer

Similar request on Discord but with a schema as an argument for the command. Maybe have the option to specify a specific schema or all? @shahidhk

dsandip avatar Jan 20 '19 11:01 dsandip

@dsandip my existing database has 2 schemas, I like to have track-all table and relationships automatically without any user intervention, Any way for it. atleast waiting that as a CLI command.

razakpm avatar Mar 15 '19 03:03 razakpm

@razakpm This should be available in one of the next couple of releases.

dsandip avatar Mar 15 '19 10:03 dsandip

@arvi3411301 Here is the usage:

# track all tables in public schema
hasura metadata track --all-tables [--schema public]

# track all tables and relationships in public schema
hasura metadata track --all-tables --all-relationships

# track only 2 tables and relationships among them
hasura metadata track --table author --table article --all-relationships

# track all tables in schema1 and schema2
hasura metadata track --all-tables --schema schema1 --schema schema2

# track only one table table1 from schema1
hasura metadata track --table table1 --schema schema1

shahidhk avatar Mar 15 '19 11:03 shahidhk

# untrack all tables in a schema
hasura metadata untrack --all-tables --schema schema1

# untrack only 1 table
hasura metadata untrack --table table1 --schema schema1

shahidhk avatar Mar 15 '19 11:03 shahidhk

@shahidhk would it make sense to have this is a start-up options, so that it can be turned on from docker-compose? triggering a cli tool is not exactly convenient in a containerized environment.

ghost avatar Jun 20 '19 15:06 ghost

@yyunak You can track all tables once using the console, export the metadata and load it on the container using the migrations image. This metadata will be applied every time the server starts. See: https://docs.hasura.io/1.0/graphql/manual/migrations/auto-apply-migrations.html

shahidhk avatar Jun 21 '19 06:06 shahidhk

any progress on this?

hasura metadata track --all-tables is still not available on 1.0.0-beta.2

c19 avatar Jul 04 '19 02:07 c19

@c19 This is still a work in progress. Some internals were changed in between and the current PR has to be reworked.

shahidhk avatar Jul 04 '19 05:07 shahidhk

We are looking at some architecture changes for code re-use in console and cli. The current PR needs to be re-worked.

shahidhk avatar Sep 10 '19 12:09 shahidhk

I think this feature is really needed/critical for anybody wanting to do automatic functional testing.

Also, in your rework, it would be fantastic if we can rename relations. The automatic way to name them fails with some words (eg, Series -> Sery) which in our case will also impair our ability to do automatic testing if we can't rename them with a cli.

Keep up the good work!

Thanks Best Benoit

On Tue, Sep 10, 2019, 08:13 Shahidh K Muhammed [email protected] wrote:

We are looking at some architecture changes for code re-use in console and cli. The current PR needs to be re-worked.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/hasura/graphql-engine/issues/1418?email_source=notifications&email_token=AFSOI3QOL7JKOVJHW3Q4FADQI6FNDA5CNFSM4GRFS4Y2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6K3VAA#issuecomment-529906304, or mute the thread https://github.com/notifications/unsubscribe-auth/AFSOI3XJKKLWER3DYK6TBUTQI6FNDANCNFSM4GRFS4YQ .

benoitscherrer avatar Sep 10 '19 12:09 benoitscherrer

+1 to this. In my development environment, my workflow is currently:

  1. Make a schema change within my Postgres environment and forget to update the Hasura metadata
  2. Redeploy my full docker stack
  3. Hasura can't apply its migrations due to incorrect metadata. I have to read the log to see the failure.
  4. Delete the metadata.json file
  5. Redeploy my full docker stack
  6. Click 'track all' on tables and relationships in Hasura
  7. Export the metadata.json to my repo
  8. Redeploy my full docker stack

I would really really really love :) a way for Hasura to start by tracking all views and relationships with admin-only default permissions, and then I only need to add to the metadata migrations to create non-admin permissions on specific views.

dvasdekis avatar Oct 24 '19 23:10 dvasdekis

@arvi3411301 Here is the usage:

# track all tables in public schema
hasura metadata track --all-tables [--schema public]

# track all tables and relationships in public schema
hasura metadata track --all-tables --all-relationships

# track only 2 tables and relationships among them
hasura metadata track --table author --table article --all-relationships

# track all tables in schema1 and schema2
hasura metadata track --all-tables --schema schema1 --schema schema2

# track only one table table1 from schema1
hasura metadata track --table table1 --schema schema1

this doesn't exist anymore

ctwhome avatar Jul 26 '20 18:07 ctwhome

Was this given up because of something else?

thelinuxlich avatar Apr 05 '21 15:04 thelinuxlich

This missing feature would help a lot for CI & CD automation.

jbek7 avatar Apr 05 '21 19:04 jbek7

With a schema-first approach, and automating environment creation, not being able to track all tables and relations programatically makes for a very difficult CI/CD setup.

Any plans to allow track all via CLI again?

86label avatar Aug 06 '21 14:08 86label

i was able to get most of the way there by using results of this api: https://hasura.io/docs/latest/api-reference/metadata-api/relationship/#pg-suggest-relationships but even after i track all the suggested relationships that api returns, there are still some more suggested in the console.

i think this where the console puts together the suggestion list. wish that was in the backend instead haha: https://github.com/hasura/graphql-engine/blob/3e83370c96c2aba91ea695dc31046e15c1ea9735/frontend/libs/console/legacy-ce/src/lib/components/Services/Data/TableRelationships/autoRelations.js#L97

sepbot avatar Jul 13 '23 07:07 sepbot

Thanks everyone for your comments and patience on this issue. We have been closely listening into all the feedback and requests from the community, and have been working on a re-imagined, re-architectured Hasura, that tackles many of these from ground up. We are pleased to announce that we are launching V3-Alpha of Hasura (Data Delivery Network) on our next Community call on Nov 30. V3 puts a lot of emphasise on local dev and CI/CD experiences. The V3 CLI and a brand new Visual Studio plugin in V3 is planned to support such requirements, and very soon. Also, the metadata authoring experience is entirely local and decoupled from live APIs, thus allowing you to iterate without affecting your production APIs. We would request to join this community call to learn more about Hasura V3. Post launch, we will update this issue with relevant details.

manasag avatar Nov 23 '23 16:11 manasag

Hasura cli v2.37.0, still unable to autotrack new tables or just use CLI to track new tables in DB. Do you have news about this simple feature? Do you need help??

poka-IT avatar Feb 19 '24 19:02 poka-IT

This is a script which track tables, relationships and functions: https://gist.github.com/poka-IT/0214518dc185370f52223c7dae2edffd

Maybe it could help peoples reading here...

poka-IT avatar Feb 29 '24 14:02 poka-IT

@poka-IT Hey thanks for the script There error mentioned while running /bin/sh: scripts/export-migrations.sh: No such file or directory - can you also please provide the sh script?

rkosyicisco avatar Oct 07 '24 12:10 rkosyicisco

This is one version of this file I can found: https://git.duniter.org/nodes/duniter-squid/-/raw/a2da6881689701e48020a9ae6820801cd65ee5d0/scripts/export-migrations.sh

Maybe need to adapt, remove the name from $1, and set your .env.

Not so straight forward, sorry about that.

Our .env.example:

HASURA_GRAPHQL_ADMIN_SECRET=my_hasura_password
HASURA_LISTEN_PORT=8080

poka-IT avatar Oct 07 '24 17:10 poka-IT