Schema/Metadata API Reference: Tables/Views

Introduction

Track/untrack a table/view in Hasura GraphQL engine.

Only tracked tables/views are available for querying/mutating/subscribing data over the GraphQL API.

track_table

track_table is used to add a table/view to the GraphQL schema.

Add a table/view author:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
    "type": "track_table",
    "args": {
        "schema": "public",
        "name": "author"
    }
}

Args syntax

Key Required Schema Description
table true TableName Name of the table
is_enum false Boolean When set to true, creates the table as an enum table.

set_table_is_enum

set_table_is_enum sets whether an already-tracked table should be used as an enum table.

Use table user_role as an enum table:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
  "type": "set_table_is_enum",
  "args": {
    "table": {
      "schema": "public",
      "name": "user_role"
    },
    "is_enum": true
  }
}

Args syntax

Key Required Schema Description
table true TableName Name of the table
is_enum true Boolean Whether or not the table should be used as an enum table.

track_table v2

Version 2 of track_table is used to add a table/view to the GraphQL schema with configuration. You can customise the root field names.

Add a table/view author:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
   "type": "track_table",
   "version": 2,
   "args": {
     "table": "author",
     "configuration": {
        "custom_root_fields": {
           "select": "Authors",
           "select_by_pk": "Author",
           "select_aggregate": "AuthorAggregate",
           "insert": "AddAuthors",
           "insert_one":"AddAuthor",
           "update": "UpdateAuthors",
           "update_by_pk": "UpdateAuthor",
           "delete": "DeleteAuthors",
           "delete_by_pk": "DeleteAuthor"
        },
        "custom_column_names": {
           "id": "authorId"
        }
     }
   }
}

A table can be tracked with a custom name. This can be useful when a table name is not GraphQL compliant, like Users Address. A custom name like users_address will complement the "Users Address" table, so that it can be added to the GraphQL schema.

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
   "type": "track_table",
   "version": 2,
   "args": {
     "table": "Author Details",
     "configuration": {
        "custom_name": "author_details"
     }
   }
}

The GraphQL nodes and typenames that are generated will be according to the identifier. For example, in this case, the nodes generated will be:

  • users_address
  • users_address_one
  • users_address_aggregate
  • insert_users_address
  • insert_users_address_one
  • update_users_address
  • update_users_address_by_pk
  • delete_users_address
  • delete_users_address_by_pk

Note

graphql-engine requires the constraint names (if any) of a table to be GraphQL compliant in order to be able to track it.

Args syntax

Key Required Schema Description
table true TableName Name of the table
configuration false Table Config Configuration for the table/view

Table Config

Key Required Schema Description
custom_name false String Customise the <table-name> with the provided custom name value. The GraphQL nodes for the table will be generated according to the custom name.
custom_root_fields false Custom Root Fields Customise the root fields
custom_column_names false CustomColumnNames Customise the column fields

Custom Root Fields

Key Required Schema Description
select false String Customise the <table-name> root field
select_by_pk false String Customise the <table-name>_by_pk root field
select_aggregate false String Customise the <table-name>_aggregete root field
insert false String Customise the insert_<table-name> root field
insert_one false String Customise the insert_<table-name>_one root field
update false String Customise the update_<table-name> root field
update_by_pk false String Customise the update_<table-name>_by_pk root field
delete false String Customise the delete_<table-name> root field
delete_by_pk false String Customise the delete_<table-name>_by_pk root field

set_table_custom_fields (deprecated)

set_table_custom_fields has been deprecated. Use the set_table_customization API to set the custom table fields.

set_table_custom_fields in version 2 sets the custom root fields and custom column names of already tracked table. This will replace the already present custom fields configuration.

Set custom fields for table/view author:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
   "type": "set_table_custom_fields",
   "version": 2,
   "args": {
     "table": "author",
     "custom_root_fields": {
        "select": "Authors",
        "select_by_pk": "Author",
        "select_aggregate": "AuthorAggregate",
        "insert": "AddAuthors",
        "insert_one":"AddAuthor",
        "update": "UpdateAuthors",
        "update_by_pk": "UpdateAuthor",
        "delete": "DeleteAuthors",
        "delete_by_pk": "DeleteAuthor"
     },
     "custom_column_names": {
        "id": "authorId"
     }
   }
}

Args syntax

Key Required Schema Description
table true TableName Name of the table
custom_root_fields false Custom Root Fields Customise the root fields
custom_column_names false CustomColumnNames Customise the column fields

set_table_customization

set_table_customization allows you to customize any given table with a custom name, custom root fields and custom column names of an already tracked table. This will replace the already present customization.

set_table_custom_fields has been deprecated in favour of this API.

Set the configuration for a table/view called author:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
   "type": "set_table_customization",
   "args": {
     "table": "author_details",
     "configuration": {
       "identifier": "author",
       "custom_root_fields": {
          "select": "Authors",
          "select_by_pk": "Author",
          "select_aggregate": "AuthorAggregate",
          "insert": "AddAuthors",
          "insert_one":"AddAuthor",
          "update": "UpdateAuthors",
          "update_by_pk": "UpdateAuthor",
          "delete": "DeleteAuthors",
          "delete_by_pk": "DeleteAuthor"
       },
       "custom_column_names": {
          "id": "authorId"
       }
     }
   }
}

Args syntax

Key Required Schema Description
table true TableName Name of the table
configuration false TableConfig Configuration for the table/view

untrack_table

untrack_table is used to remove a table/view from the GraphQL schema.

Remove a table/view author:

POST /v1/query HTTP/1.1
Content-Type: application/json
X-Hasura-Role: admin

{
    "type": "untrack_table",
    "args": {
        "table": {
            "schema": "public",
            "name": "author"
         },
        "cascade": true
    }
}

Args syntax

Key Required Schema Description
table true TableName Name of the table
cascade false Boolean When set to true, the effect (if possible) is cascaded to any metadata dependent objects (relationships, permissions, templates)