Hasura cli.migration conainer 无法更新 postgres-11 中的 typeorm @updatedatecolumn

Hasura cli.migration conainer fails to update typeorm @updatedatecolumn in postgres-11

我有一个 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 支持,但这似乎是浪费时间,因为我无法通过。有没有人经历过这个?我错过了什么吗?

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

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

您应该为 created_at 列设置默认值 now() 并为 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,这都会更新列。