0

我有一个 postgres 数据库,其中在 express api 中使用 typeorm 设置表,并且我的所有表都已 createdAt 和 updatedAt 列。

当我直接使用我的 api 时,一切正常,并且我的 updatedAt 列得到适当更新。但是当我通过 hasura 编写 graphql 查询时,updatedAt 永远不会更新。

我正在使用 hasura 引擎 1.0.0.beta.6.cli.migrations,postgres 11.5 docker 容器和 express 4.17.1,typeorm@0.2.x 在我的 ubuntu 19.04 系统上本地运行。我试图在 discord 上获得 hasura 支持,但这似乎是在浪费时间,因为我无法通过。有没有人经历过这个?我错过了什么吗?

4

1 回答 1

0

TypeORM 处理 Postgres 之外的 createdAt 和 updatedAt 列。当您使用 TypeORM 插入数据时,它会将值注入这些列。

由于 Hasura 直接与 Postgres 对话,Postgres 和 Hasura 都不知道应该更新这些列。

您应该为该列设置默认值now()并为该created_at列设置一个触发器updated_at

CREATE TABLE "public"."test_table" (
  "id" serial NOT NULL,
  "created_at" timestamptz NOT NULL DEFAULT now(),
  "updated_at" timestamptz NOT NULL DEFAULT now(),
  PRIMARY KEY ("id")
);

CREATE OR REPLACE FUNCTION "public"."set_current_timestamp_updated_at"() RETURNS TRIGGER AS $$
  DECLARE _new record; 
  BEGIN _new := NEW;
  _new."updated_at" = NOW();
  RETURN _new; END; 
$$ LANGUAGE PLPGSQL;

CREATE TRIGGER "set_public_time_updated_at" BEFORE UPDATE ON "public"."test_table" FOR EACH ROW EXECUTE PROCEDURE "public"."set_current_timestamp_updated_at"();

COMMENT ON TRIGGER "set_public_time_updated_at" ON "public"."test_table" IS 'trigger to set value of column "updated_at" to current timestamp on row update';

无论您如何联系 Postgres,这都会更新列。

于 2019-10-13T18:36:00.500 回答