Postgres:将具有 FK 的数据迁移到多数据库
Postgres: Migrate data with FKs to multi-database
我目前有一个数据库,其中包含来自多个客户端的数据。我的任务是编写一个脚本,将数据拆分为每个客户端的单独数据库(每个数据库将具有相同的架构)。
为了示例的目的,假设数据库中充满了艺术家、歌曲、视频、评论和位置。我为每个客户创建了单独的数据库,并且我有一个 table 说明哪个艺术家属于哪个客户。
ArtistClient
- FK to Artist
- ClientDbName
Location
- ...
Artist
- FK to Location
- ...
Song
- FK to Artist
- ...
Video
- FK to Artist
- ...
Review
- FK to Song
- ...
现实中的关系比这个多很多,但这说明了问题。
我遇到的问题是跟踪 table 之间的所有 FK 关系。有什么优雅的方法可以遍历 Artist
中的所有行,从 ArtistClient
table 中获取 ClientDbName
,然后插入与艺术家相关的所有数据(通过分析确定FKs) 到正确的数据库中?
从所有没有外键的表开始。复制一个客户的所有值。
接下来找到所有具有起始表外键的表。复制这些值。
重复此过程,直到复制完所有表格。
postgresql 中没有内置方法来执行此操作,但您可以编写一个脚本来解析数据库模式的文本表示并确定表的最佳顺序,甚至可能生成 SQL过程中的陈述。是否值得编写脚本取决于手动执行此过程的工作量。
或者,您可以禁用外键约束检查,复制所有数据,然后重新启用检查。
我目前有一个数据库,其中包含来自多个客户端的数据。我的任务是编写一个脚本,将数据拆分为每个客户端的单独数据库(每个数据库将具有相同的架构)。
为了示例的目的,假设数据库中充满了艺术家、歌曲、视频、评论和位置。我为每个客户创建了单独的数据库,并且我有一个 table 说明哪个艺术家属于哪个客户。
ArtistClient
- FK to Artist
- ClientDbName
Location
- ...
Artist
- FK to Location
- ...
Song
- FK to Artist
- ...
Video
- FK to Artist
- ...
Review
- FK to Song
- ...
现实中的关系比这个多很多,但这说明了问题。
我遇到的问题是跟踪 table 之间的所有 FK 关系。有什么优雅的方法可以遍历 Artist
中的所有行,从 ArtistClient
table 中获取 ClientDbName
,然后插入与艺术家相关的所有数据(通过分析确定FKs) 到正确的数据库中?
从所有没有外键的表开始。复制一个客户的所有值。
接下来找到所有具有起始表外键的表。复制这些值。
重复此过程,直到复制完所有表格。
postgresql 中没有内置方法来执行此操作,但您可以编写一个脚本来解析数据库模式的文本表示并确定表的最佳顺序,甚至可能生成 SQL过程中的陈述。是否值得编写脚本取决于手动执行此过程的工作量。
或者,您可以禁用外键约束检查,复制所有数据,然后重新启用检查。