'TypeORM array is not supported in postgres?
I have a column kid_ages which is Integer[]. When migrating, I get the following error:
DataTypeNotSupportedError: Data type "Array" in "home.kid_ages" is not supported by "postgres" database.
I tried adding the following options to my column:
type: 'array'
and:
array: true,
default: [],
nullable: false,
@Column({
array: true,
default: [],
nullable: false,
})
kid_ages: string;
Solution 1:[1]
The docs says, that it should work:
@Column("int", { array: true })
array: number[];
this is from the example https://github.com/typeorm/typeorm/blob/master/test/functional/database-schema/column-types/postgres/entity/Post.ts
In your code the array property is no array.
Have you tried kid_ages: string[];?
Solution 2:[2]
As mentioned above, you can create Postgres' array column with next code:
@Column("int", { array: true })
kid_ages: number[];
If you then need to find some kid with age 5, use this:
kid = getRepository('kid')
.createQueryBuilder()
.where(':kid_age = ANY (kid.kid_ages)', { kid_age: 5 });
Solution 3:[3]
For people looking to deal with arrays or string within your entities, based on @thopaw 's answer, you can use the following code:
@Column("text", { array: true })
kid_ages: string[];
Solution 4:[4]
I tried all of the solutions already mentioned, but none of them worked. Finally found solution among the Github issues in TypeORM repo.
I quote the solution:
This was a simple fix, the type of the column shouldn't be an array. Changed to this and it now works:
@Column({array: true}) tags: string;Better documentation on arrays would have been useful.
Solution 5:[5]
My solution for Postgres for checking array inclusion is as follows:
I have defined the column as follows:
@Column("text", { array: true, default: "{}" })
tags: string[];
this.getFindQueryBuilder().where("recipe.tags && ARRAY[:...tags]", {tags: tags})
"getFindQueryBuilder": Is a function to get shared SelectQueryBuilder in order to save code.
The important part here is the where clause that I have shown in the example.
Solution 6:[6]
The important thing to note here that even declaring integer array, the default should be defined as an empty object.
@Column("int", { array: true, default: {} })
ages: Number[];
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | thopaw |
| Solution 2 | Dmitriy Apollonin |
| Solution 3 | A. Maitre |
| Solution 4 | Humoyun Ahmad |
| Solution 5 | Pablo Lopez |
| Solution 6 | Gaurav Sharma |
