将关联记录复制到新表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将关联记录复制到新表相关的知识,希望对你有一定的参考价值。
我有四张桌子 - company_targetables
,employee_targetables
,employees
和users
。我正在使用Postgresql 9.6。
架构:
company_targetables
id
company_id
外键name
字符串value
- 字符串
employee_targetables
id
company_targetable_id
外键employee_id
外键
employees
- user_id
employee_targetables
是company_targetables
和employees
之间的联盟。
我想分别将company_targetables
和employee_targetables
移到新表custom_attributes
和user_custom_attributes
,保留关系,但是我想将user_custom_attributes
记录与user
外键关联,而不是将user_id
与员工联系起来。
新表的模式:
custom_attributes
:
- 与
company_targetables
的架构相同
user_custom_attributes
custom_attribute_id
user_id
需要从旧表中的关联employee
记录中获取用户ID
例如,如果我有一个与ID为1的employee_targetable
关联的company_targetable
,我可以很容易地复制company_targetable_id
,但是我需要确保使用与custom_attribute
相同的值创建相应的company_targetable
记录,以便关系中的列值为保存。另外,我想确保新的user_custom_attribute
记录用user_id
值填充employees.user_id
列。
目前,我正在做这个1比1 - 首先创建custom_attribute
记录,然后从user_id
抓住employee
并创建user_custom_attribute
记录,但有大约500,000条记录,这需要一段时间。
有没有办法有效地做到这一点?
这就是我想出来的
首先复制从company_targetables到custom_attributes的所有内容:
INSERT INTO custom_attributes(id, name, value, targetable, company_id, created_at, updated_at)
SELECT company_targetables.id, company_targetables.name, company_targetables.value, 't',
company_targetables.company_id, company_targetables.created_at, company_targetables.updated_at
FROM company_targetables
然后从employee_targetables到用户自定义属性的所有内容,加入员工,以便我可以填写user_id
列:
INSERT INTO user_custom_attributes(id, custom_attribute_id, user_id, created_at, updated_at)
SELECT employee_targetables.id, employee_targetables.company_targetable_id, employees.user_id,
employee_targetables.created_at, employee_targetables.updated_at
FROM employee_targetables
INNER JOIN employees ON employees.id = employee_targetables.employee_id
大约500,000条记录花了22秒 - 这也许是批量更新的好方法。
以上是关于将关联记录复制到新表的主要内容,如果未能解决你的问题,请参考以下文章