我有一个postgres数据库,其中的表是在express api中使用typeorm设置的,并且我所有的表都有createdAt和updatedAt列。
当我直接使用我的api时,一切都运行得很好,并且我的updatedAt列得到了适当的更新。但是当我通过hasura编写graphql查询时,updatedAt永远不会更新。
我使用hasura engine 1.0.0.beta.6.cli.migrations,在我的ubuntu19.04系统上本地运行的是带有express 4.17.1,typeorm@0.2.x的postgres11.5 docker容器。我试图联系hasura对不和谐的支持,但这似乎只是浪费时间,因为我无法通过。有没有人经历过这种情况?我是不是遗漏了什么?
发布于 2019-10-14 02:36:01
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。
https://stackoverflow.com/questions/58234654
复制相似问题