Недавно я создал короткое видео о том, как разделить столбец временных меток для Hasura. Это включало SQL для Postgres через миграцию схемы, а также подробности о том, как это отображается в пользовательском интерфейсе Hasura. Вы можете посмотреть видео здесь.

Часть того, что я показываю в видео, также доступна в репозитории Github.

https://github.com/Adron/graphql-relational-concept-mapping

Создание таблицы Postgres SQL

Вот конкретный запрос к базе данных, который создает таблицу с временной меткой, разбитой на год, месяц и день в качестве сгенерированных данных столбца.

create table standard_relational_model.users_data
(
    user_id uuid PRIMARY KEY,
    address_id uuid,
    signup_date timestamp DEFAULT now(),
    year int  GENERATED ALWAYS AS (date_part('year', signup_date)) STORED,
    month int  GENERATED ALWAYS AS (date_part('month', signup_date)) STORED,
    day int  GENERATED ALWAYS AS (date_part('day', signup_date)) STORED,
    points int,
    details jsonb
);

В этом SQL столбец signup_date является столбцом метки времени, который я хочу разделить на год, месяц и день. Я настроил его с вызовом функции по умолчанию now() только для заполнения столбца и не требует ввода при вставке новой строки. С этим начальным числом сгенерированные столбцы года, месяца и дня используют функцию date_part() для извлечения конкретного значения из столбца signup_date и сохранения его в соответствующем столбце.

Другие столбцы предназначены только для других ссылок.

Консоль Хасуры

В консоли Hasura эти столбцы будут выглядеть примерно так.

Обратите внимание, что синтаксис, отображаемый для них, отличается от миграции, которая их создала.

date_part('day'::text, signup_date)

Вышеупомянутое, конечно, относится к дню, и каждая соответствующая часть обозначается месяцем, годом и т. д.

Когда данные добавляются в таблицу, результаты возвращаются следующим образом с GraphQL и results.

ГрафQL

Запрос.

query MyQuery {
   users_data {
    signup_date
    year
    month
    day
  }
}

Результаты.

{
  "data": {
    "users_data": [
      {
        "signup_date": "1999-04-21T00:00:00",
        "year": 1999,
        "month": 4,
        "day": 21
      },
            ... etc ...
      {
        "signup_date": "2007-01-02T00:00:00",
        "year": 2007,
        "month": 1,
        "day": 2
      },
      {
        "signup_date": "2021-06-29T00:09:48.359247",
        "year": 2021,
        "month": 6,
        "day": 29
      }
    ]
  }
}

SQL

Запрос.

select signup_date, year, month, day
from standard_relational_model.users_data;

Результаты.

1999-04-21 00:00:00.000000,1999,4,21
2012-07-04 00:00:00.000000,2012,7,4
2019-06-24 00:00:00.000000,2019,6,24
2013-03-07 00:00:00.000000,2013,3,7
2007-01-02 00:00:00.000000,2007,1,2
2021-06-29 00:09:48.359247,2021,6,29

Вот как создавать сгенерированные столбцы в Postgres и как они доступны через Hasura для предоставления через GraphQL!