Недавно я создал короткое видео о том, как разделить столбец временных меток для 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!