Scripts
Automatic updatedAt
DROP TRIGGER IF EXISTS upd_trig on "MessagesSession"; create or replace FUNCTION upd_trig() RETURNS trigger LANGUAGE plpgsql AS $$BEGIN NEW."updatedAt" := gen_created_at(); RETURN NEW; END;$$;
And for every table that you want an updatedAt
column:
CREATE TRIGGER upd_trig BEFORE UPDATE ON your_table FOR EACH ROW EXECUTE PROCEDURE upd_trig();
Automatic createdAt
CREATE OR REPLACE FUNCTION gen_created_at() RETURNS float as $$ BEGIN return ROUND(extract(epoch from NOW()::TIMESTAMPTZ) * 1000, 0)::float; END $$ LANGUAGE plpgsql;
Automatic human readble createdAt in HK
CREATE OR REPLACE FUNCTION gen_created_at_hk_timestr() RETURNS text as $$ BEGIN return TO_CHAR((NOW()::TIMESTAMPTZ AT TIME ZONE 'UTC' AT TIME ZONE 'GMT+8'), 'YYYY-MM-DD HH24:MI:SS'); END $$ LANGUAGE plpgsql;
Usages
Prisma
model SomeModel { ... createdAt Float @default(dbgenerated("gen_created_at()")) createdAtHK String @default(dbgenerated("gen_created_at_hk_timestr()")) }
Plain SQL
ALTER TABLE "SomeModel" ADD COLUMN "createdAt" DOUBLE PRECISION NOT NULL DEFAULT gen_created_at(), ADD COLUMN "createdAtHK" TEXT NOT NULL DEFAULT gen_created_at_hk_timestr();