我想在我的postgresql(drizzle-orm)中存储一个latestUpdatedAt变量。这是我的架构:
export const documentsTable = pgTable(
"documents",
{
id: serial("id").primaryKey(),
displayId: uuid("display_id").defaultRandom().notNull().unique(),
title: varchar("title", { length: 100 }).notNull(),
content: text("content").notNull(),
latestText: text("latestText").notNull(),
pinnedMessageId: varchar("pinned_message_id").default(""),
retrivedMessage:integer("retrived_message").default(-100000),
latestUpdatedAt: timestamp("latestUpdatedAt").notNull().defaultNow(),//latestUpdatedAt
},
(table) => ({
displayIdIndex: index("display_id_index").on(table.displayId),
}),
);
我想在每次更新latestText时更新latestUpdatedAt。以下是我更新变量的方法:
const updateDocument = async () => {
if (!debouncedDocument) return;
const res = await fetch(`/api/documents/${documentId}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: debouncedDocument.title,
content: debouncedDocument.content,
latestText: debouncedDocument.latestText,
messages: debouncedDocument.messages,
pinnedMessageId: debouncedDocument.pinnedMessageId,
retrivedMessage: debouncedDocument.retrivedMessage,
latestUpdatedAt: debouncedDocument.latestUpdatedAt,
}),
});
if (!res.ok) {
return;
}
const data: Document = await res.json();
else if(dbDocument?.latestText!== data.latestText){
router.refresh();
console.log("refreshed_message");
}
};
const setContent = (newContent: string,newLatestText:string) => {
if (document === null) return;
console.log(new Date());
setDocument({
...document,
latestText:newLatestText,
latestUpdatedAt:new Date(),//I think here's the problem
});
};
这是我的更新文档架构:
import { z } from "zod";
export const updateDocSchema = z.object({
title: z.string().optional(),
content: z.string().optional(),
latestText: z.string().optional(),
messages: z.array(z.object({text:z.string().optional(), author:z.string().optional(),sendAt:z.date().optional()})).optional(),
pinnedMessageId: z.string().optional(),
retrivedMessage: z.number().optional(),
latestUpdatedAt: z.date().optional(),
});
当我评论latestUpdatedAt部分时,latestText工作正常,并在更新latestUpdatedAt变量时收到错误:400,所以我猜问题是时间戳无法存储
new Date()
。
我想知道是否可以存储和更新
new Date()
,以及如何解决这个问题。谢谢!
根据最新文档:
您可以将时间戳的类型推断为日期:
// will infer as date
timestamp: timestamp('timestamp', { mode: "date" }),
举个例子,
export const documentsTable = pgTable(
"documents",
{
// ...
latestUpdatedAt: timestamp("latestUpdatedAt", { mode: 'date' })
.notNull()
.defaultNow(),
},
// ...
);
这将允许您在使用 UPDATE 时使用
new Date()
,例如
db.update(documentsTable)
.set({
// ...
latestUpatedAt: new Date(),
})
.where(/* YOUR_CONDITION */),