如何使用 drizzle orm postgres 进行串口操作?

问题描述 投票:0回答:2

我想在 drizzle 中使用串行类型,但在迁移时出现此错误。我找不到原因,我正在从 drizzle-orm/pg-core 导入序列。

error: type "serial" does not exist

这是我的架构:

    export const likes = pgTable("likes", {
      postId: text("post_id").notNull().primaryKey(),
      authorId: integer("author_id"),
    });
    
    export const posts = pgTable("post", {
      id: serial("id").notNull().primaryKey(),
      code: text("content"),
      language: text("content"),
      likes: integer("likes"),
      authorId: integer("author_id")
        .notNull()
        .references(() => users.id),
    });
    
    export const users = pgTable("user", {
      id: serial("id").notNull().primaryKey(),
      username: text("username").unique(),
      name: text("name"),
      email: text("email").notNull(),
      emailVerified: timestamp("emailVerified", { mode: "date" }),
      image: text("image"),
    });
    
node.js database postgresql next.js backend
2个回答
3
投票

从错误信息来看,Drizzle 无法识别串口类型。这是因为 Drizzle 可以与不同的数据库引擎配合使用,而串行类型是 PostgreSQL 独有的。 使用integer() 类型而不是serial() 类型来解决问题,因为integer() 是所有数据库引擎都支持的常见SQL 类型。

试试这段代码,这里我使用了integer()类型而不是serial()类型:

export const likes = pgTable("likes", {
  postId: text("post_id").notNull().primaryKey(),
  authorId: integer("author_id"),
});

export const posts = pgTable("post", {
  id: integer("id").notNull().primaryKey(),
  code: text("content"),
  language: text("content"),
  likes: integer("likes"),
  authorId: integer("author_id")
    .notNull()
    .references(() => users.id),
});

export const users = pgTable("user", {
  id: integer("id").notNull().primaryKey(),
  username: text("username").unique(),
  name: text("name"),
  email: text("email").notNull(),
  emailVerified: timestamp("emailVerified", { mode: "date" }),
  image: text("image"),
});

另外,与serial类型不同,integer()类型不支持自动递增,所以尝试使用这个SQL查询来允许posts表的id列自动递增:

CREATE SEQUENCE post_id_seq;
ALTER TABLE posts ALTER COLUMN id SET DEFAULT nextval('post_id_seq');

希望它有效:)


0
投票

您正确地尝试使用毛毛雨的 PostgreSQL 列类型 -

serial()
serial4()
(只是一个别名)。

自动递增4字节整数,方便创建唯一标识符列(类似于其他一些数据库支持的AUTO_INCRMENT属性)。

import { pgTable, serial } from "drizzle-orm/pg-core";

export const table = pgTable('table', {
  serial: serial('serial'),
});

我通过查看我的 postgres 数据库确认它可以工作,该数据库现在包含递增值:

Screenshot of id column in postgres table.

© www.soinside.com 2019 - 2024. All rights reserved.