Skip to main content
Version: v2.x

Postgres: Naming conventions

Introduction

The Hasura GraphQL engine generates names for various schema objects (fields, types, arguments, etc.) and the naming convention for these autogenerated names can be customised to suit your needs.

Note

Naming conventions are an experimental feature and can be enabled by adding naming_convention to the HASURA_GRAPHQL_EXPERIMENTAL_FEATURES environment variable array or with the server flag --experimental-feature.

Supported from

Naming conventions are available at version v2.8.0 and higher.

Database Support

Naming conventions are only available on Postgres sources.

Supported naming conventions

Currently, Hasura provides two naming conventions:

  • hasura-default: This is the default naming convention used in the Hasura server and is used when a naming convention is not explicitly specified. In this naming convention, all names will use snake casing (snake_case) and defined enum table values will not change.

  • graphql-default: This is a new naming convention which is more popular in the Javascript ecosystem. Suppose you have a table called my_table in schema my_schema, this convention will work as follows:

    • Type names will be pascal-cased. In the above example, Hasura Server will generate the type MySchemaMyTable for the select field.
    • Field names will be camel-cased. In the above example, Hasura Server will generate the field name mySchemaMyTableAggregate for the aggregate field.
    • Argument names and boolean operators will be camel-cased. For example, Hasura Server will generate argument names like orderBy, distinctOn.
    • Enum values will be upper-cased. i.e. for an enum table, all the values will be upper-cased when used as enum value in Hasura Server.
Naming ConventionField namesType namesArgumentsEnum values
hasura-defaultSnake caseSnake caseSnake caseas defined
graphql-defaultCamel casePascal caseCamel caseUppercased
Note
  • Setting custom table and field names in Hasura will override the naming convention of the source. For example, if the custom table name is set to my_table and naming_convention is graphql-default, the field names generated will be my_table, my_tableByPk, my_tableAggregate and so on.
  • hasura-default is the naming convention used prior to v2.8.0.

For example:

Consider a schema named, app_db, with the following structure:

  1. app_users: A table with the columns user_id, username, last_seen, favourite_day and referred_by.
  2. week_days: An enum table with column day_names and rows monday, tuesday and so on.
  3. We have a foreign key set up between week_days.day_names and app_users.favourite_day.

For the above schema, a sample GraphQL query will look like the following with the different naming conventions:

hasura-default

GraphiQL
Query Variables
Request Headers

graphql-default

GraphiQL
Query Variables
Request Headers
Behaviour of custom table name

For the graphql-default naming convention and a custom table name for a given table/view, the following rules are followed:

  • The custom table name will not be modified (change of case) if it is the first entity for a given name.
  • The custom table name may be modified if the name is being prefixed by something.
Sl. no.Custom table nameSelectSelect by pkTypenameInsert table one
1table_onetable_onetable_oneByPktableOneinsertTable_oneOne
2tableOnetableOnetableOneByPktableOneinsertTableOneOne
3TableOneTableOneTableOneByPkTableOneinsertTableOneOne

Set default naming convention for all sources

For setting the default naming convention for all sources, set the environment variable HASURA_GRAPHQL_DEFAULT_NAMING_CONVENTION to one of hasura-default or graphql-default.

This means any database source will follow this naming convention unless explicitly set to something else.

Set naming convention for a particular source

Currently setting the database naming convention is only allowed at the time of connecting your database. Head to the Data -> Manage -> Connect Database page. Under the GraphQL Field Customization section you can choose the naming convention of your choice.

Naming Convention
Note

Setting the convention in the source customization will override the default naming convention.