【问题标题】:TypeORM array is not supported in postgres?postgres 不支持 TypeORM 数组?
【发布时间】:2019-12-27 21:55:36
【问题描述】:

我有一个专栏kid_ages,即Integer[]。迁移时出现以下错误:

DataTypeNotSupportedError: Data type "Array" in "home.kid_ages" is not supported by "postgres" database.

我尝试在我的专栏中添加以下选项:

type: 'array'

和:

array: true,
default: [],
nullable: false,

@Column({
  array: true,
  default: [],
  nullable: false,
})
kid_ages: string;

【问题讨论】:

    标签: javascript node.js postgresql typescript typeorm


    【解决方案1】:

    文档说,它应该可以工作:

    @Column("int", { array: true })
    array: number[];
    

    这是来自示例https://github.com/typeorm/typeorm/blob/master/test/functional/database-schema/column-types/postgres/entity/Post.ts

    在您的代码中,数组属性不是数组。 你试过kid_ages: string[];吗?

    【讨论】:

    • 嗯,我似乎在使用这个时遇到了一个错误:“您需要提供显式类型”我使用以下可为空的类型:@Field({ nullable: true }) @Column('text' , { array: true }) 标签?:string[] |空
    • 我不是 TypeORM 专家,但您可以尝试将 null 值默认为空数组 @Column({ type: "text", array: true, default: [] })
    【解决方案2】:

    如上所述,您可以使用下面的代码创建 Postgres 的数组列:

    @Column("int", { array: true })
    kid_ages: number[];
    

    如果您需要找到 5 岁的孩子,请使用:

    kid = getRepository('kid')
            .createQueryBuilder()
            .where(':kid_age = ANY (kid.kid_ages)', { kid_age: 5 });
    

    【讨论】:

      【解决方案3】:

      对于希望在您的实体中处理数组或字符串的人,根据@thopaw 的回答,您可以使用以下代码:

      @Column("text", { array: true })
      kid_ages: string[];
      

      【讨论】:

        【解决方案4】:

        我的 Postgres 检查数组包含的解决方案如下:

        我已将列定义如下:

            @Column("text", { array: true, default: "{}" })
            tags: string[];
        
        this.getFindQueryBuilder().where("recipe.tags && ARRAY[:...tags]", {tags: tags})
        

        “getFindQueryBuilder”:是一个获取共享 SelectQueryBuilder 以保存代码的函数。

        这里的重要部分是我在示例中展示的 where 子句。

        【讨论】:

          【解决方案5】:

          这里需要注意的重要一点是,即使声明整数数组,默认也应该定义为空对象。

          @Column("int", { array: true, default: {} })
          ages: Number[];
          

          【讨论】:

            【解决方案6】:

            我尝试了所有已经提到的解决方案,但都没有奏效。终于在 TypeORM repo 的 Github 问题中找到了解决方案。

            我引用解决方案:

            这是一个简单的修复,列的类型不应该是数组。 改成这个,它现在可以工作了:

            @Column({array: true})
            tags: string;
            

            更好的数组文档会很有用。

            Source

            【讨论】:

              猜你喜欢
              • 2021-01-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-04-16
              • 2011-05-04
              • 2020-03-28
              • 2020-11-24
              相关资源
              最近更新 更多