【问题标题】:Can we create a joint table in TypeORM for tables from different databases?我们可以在 TypeORM 中为来自不同数据库的表创建一个联合表吗?
【发布时间】:2021-04-29 04:02:53
【问题描述】:
我正在尝试为来自不同 PostgreSQL 数据库的两个表创建一个联合表。使用 TypeORM,我在 TypeScript 中定义 @ManyToMany(() => 'TableFromAnotherDb') 时遇到问题。我创建了一个接口,该接口具有关节表所需的属性,但牢记接口 - 当它在 ManyToMany 部分中分配时它是无用的,因为它指的是一种类型,我试图将它用作一个值.
另外,这里有必要同时建立两个数据库连接吗?因为我试图掩盖第二个数据库所需的表的接口。
有什么建议可以避免这个问题,同时让我的打字稿编译器满意吗?
【问题讨论】:
标签:
node.js
typescript
postgresql
typeorm
node.js-typeorm
【解决方案1】:
我非常怀疑 TypeORM 是否允许在这样的数据库之间进行链接。问题是大多数关系会自动生成 SQL 查询,这些查询会引入它需要操作的各种数据库表。如果您有两个数据库,一个 SQL 查询无法获得它需要的所有信息。因此,您的应用程序需要成为将它们粘合在一起的粘合剂。
我认为你能得到的最好的方法是将 ID 存储在实体中,然后手动查询每个连接。
@Entity()
class Thing {
@Column()
otherThingId: number
}
// usage
const thing = await ThingRepository.find(123)
const otherThing = await OtherThingRepository.find(thing.otherThingId)
【讨论】:
-
我不知道你的混淆层(TypeORM)是否可以处理,但我想到了两个 Postgres 选项。在一个数据库中为另一个数据库中的表创建dblink 或创建foreign data wrapper。检查您的 TypeORM 文档以查看是否支持其中一个或两个。但这样做时我不会屏住呼吸。