首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hasura cli.migration conainer无法更新postgres-11中的typeorm @updatedatecolumn

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

Stack Overflow用户
提问于 2019-10-04 18:31:53
回答 1查看 279关注 0票数 0

我有一个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对不和谐的支持,但这似乎只是浪费时间,因为我无法通过。有没有人经历过这种情况?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-14 02:36:01

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

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

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

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58234654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档