1

当我在 Postgresql 中编写函数时,我可以添加严格,从而导致 Graphql 中需要所有参数(!),如果没有严格,所有参数都是可选的。

在非严格函数中的必填字段上,我可以抛出异常或简单地返回 null 而无需执行函数,就像参数为 null 时严格函数所做的那样。但是我怎样才能告诉 Postgraphile 需要哪些参数呢?通过注释或其他内容,或将具有默认值的参数标记为可选。

4

1 回答 1

1

在我的搜索中,我发现这里提出了这个问题尤其是这个答案。我在引用中找到的答案:

此功能是通过 pgStrictFunctions 设置在 graphile-build-pg 中实现的,但目前还没有通过 postgraphile-core 向 PostGraphQL 本身公开。它所做的是将所有函数都视为严格,要求将所有参数标记为必需,除非它们具有默认值。

可以将参数标记为默认 null,但当然,具有 null 默认值的严格函数将自动返回 null 而不会被调用。

create function a(b int, c int default null)
returns int as $$
  select b;
$$ language sql stable;

默认情况下,b 和 c 都不是必需的,但是使用 pgStrictFunctions 集 b 将被标记为必需(但 c 不会)。

虽然它提到了一个解决方案,但没有说明如何实施它。在整个项目(包括 node_modules)中搜索“pgStrictFunctions”也没有给出任何线索。如何实现我终于在不和谐中找到了,这就是我最终让它工作的方式:

@Module({
  controllers: [],
  imports: [
    PostGraphileModule.forRoot({
      ......
      graphileBuildOptions: {
        pgStrictFunctions: true,
      },
      ......
    }),
  ],
  providers: [GraphQLService],
})
于 2019-10-25T07:26:58.850 回答