在PostgreSQL函数中为计算字段使用Hasura会话
我创建了一个“收藏”功能,它类似于许多网站中常见的“喜欢”功能 共有3个表格:在PostgreSQL函数中为计算字段使用Hasura会话,postgresql,graphql,hasura,Postgresql,Graphql,Hasura,我创建了一个“收藏”功能,它类似于许多网站中常见的“喜欢”功能 共有3个表格: 具有主键UUID的“用户” 带有pk UUID的“照片” 带有pk user.UUID和post.UUID的“收藏夹” 相应的SQL为: CREATE TABLE public."user" ( id uuid DEFAULT public.gen_random_uuid() NOT NULL ); CREATE TABLE public."photo" ( id uuid DEFAULT pub
- 具有主键UUID的“用户”
- 带有pk UUID的“照片”
- 带有pk user.UUID和post.UUID的“收藏夹”
CREATE TABLE public."user" (
id uuid DEFAULT public.gen_random_uuid() NOT NULL
);
CREATE TABLE public."photo" (
id uuid DEFAULT public.gen_random_uuid() NOT NULL
);
CREATE TABLE public."favorite" (
userId uuid NOT NULL
photoId uuid NOT NULL
);
现在,我想用一个计算字段isFavorite
作为布尔值查询照片,当当前用户喜欢照片时,该值设置为true
因此,我创建了这个自定义SQL函数:
CREATE OR REPLACE FUNCTION public.isfavorite(photo photo, hasura_session json)
RETURNS boolean
LANGUAGE sql
STABLE
AS $function$
SELECT EXISTS (
SELECT *
FROM public.favorite
WHERE "userId" = (VALUES (hasura_session ->> 'x-hasura-role'))::uuid AND "photoId" = photo.uuid
)
$function$
我可以在Hasura中使用SQL创建此函数,但当我将此函数设置为照片表中的计算字段时,Hasura显示以下错误:
在表“photo”中:在计算字段“isFavorite”中:函数“isFavorite”被重载。不支持重载函数
我哪里出错了?我们可以构建一个返回布尔值的自定义函数吗?您如何构建最喜欢(或喜欢)的功能
已解决:数据库中有两个导致过载的isFavorite
函数
因此,现在在照片模式中有一个isFavorite
字段,但我需要提供$args
,并将hasura_session
作为参数。
如何在不需要填写参数的情况下提供hasura_会话?您需要跟踪传递会话变量的计算列。
最近也增加了这一点。请确保您的版本为v1.3或更高版本。我还将更改函数以接受photo_row作为变量,而不是photo photo,这可能会导致PostgreSQL出现问题
CREATE OR REPLACE FUNCTION public.isfavorite(photo_row photo, hasura_session json)
RETURNS boolean
LANGUAGE sql
STABLE
AS $function$
SELECT EXISTS (
SELECT *
FROM public.favorite
WHERE "userId" = (VALUES (hasura_session ->> 'x-hasura-role'))::uuid AND "photoId" = photo.uuid
)
$function$
您需要跟踪传递会话变量的计算列。
最近也增加了这一点。请确保您的版本为v1.3或更高版本。我还将更改函数以接受photo_row作为变量,而不是photo photo,这可能会导致PostgreSQL出现问题
CREATE OR REPLACE FUNCTION public.isfavorite(photo_row photo, hasura_session json)
RETURNS boolean
LANGUAGE sql
STABLE
AS $function$
SELECT EXISTS (
SELECT *
FROM public.favorite
WHERE "userId" = (VALUES (hasura_session ->> 'x-hasura-role'))::uuid AND "photoId" = photo.uuid
)
$function$
请回答您的问题,并为有问题的表添加
CREATE TABLE
语句。@a_horse_,没有完成名称。但我不确定这对回答这个问题是否有用……那么计算列在哪里呢?计算列在表格照片上。我直接在Hasura控制台中完成了所有操作,而不是使用SQL。在照片表的create table语句中没有计算列。请回答您的问题,并为所讨论的表添加create table
语句。@a_horse__,没有完成名称。但我不确定这对回答这个问题是否有用……那么计算列在哪里呢?计算列在表格照片上。我直接在Hasura控制台中完成了所有操作,而不是使用SQL。在photo tableThx的create table语句中没有计算列供您回答!这正是我在阅读了对Hasura 1.2.1端点的v1/query
的响应后所做的。但我仍然需要提供args。如果我导出所有元数据,我可以看到session_参数未设置。有bug吗?好的,这个功能还没有发布:我看到这个功能在25天前被合并了。因为它也在文档中,我想它已经发布了。我没有试过。谢谢你的回答!这正是我在阅读了对Hasura 1.2.1端点的v1/query
的响应后所做的。但我仍然需要提供args。如果我导出所有元数据,我可以看到session_参数未设置。有bug吗?好的,这个功能还没有发布:我看到这个功能在25天前被合并了。因为它也在文档中,我想它已经发布了。我实际上没有试过。