我使用大型postgresql生产数据库。偶尔需要使用实际生产数据进行调试。由于数据库的大小,将整个转储传输到我们的开发工作站是不切实际的。
是否有办法(可能使用information_schema)提取单个记录,以及:
此记录引用的所有记录,递归级联
所有引用此记录的记录(以前的标准也适用于这些记录)
也许最好用一个例子说明:
如果我们有以下表格:
人(fk to Addresses)
地址(fk到城市)
城市
员工(fks to Employee_Types,People)
Employee_Types
假设我想在People表中“提取”特定记录。我想得到:
(1)人物中的记录
(2)(1)
中People记录引用的地址中的记录(3)由(2)
中的地址记录引用的城市记录(4)任何涉及(1)
中人员记录的员工记录(5)在(4)中找到的Employees记录引用的Employee_Types记录
有什么想法吗?
答案 0 :(得分:1)
创建一个包含与这些人相关的所有记录的转移表:
select
c.name as city_name, c.id as city_id,
a.street, a.zip,
et.type, et.type_id,
p.id as people_id, p.name,
e.id as employee_id, e.people_id as employee_people_id, e.type_id as employee_type_id
into transfer
from People p
inner join Addresses a on p.zip = a.zip
inner join Cities c on a.city_id = c.id
inner join Employees e on p.id = e.people_id
inner join Employee_Type et on et.id = e.type_id
where p.id in (@people_id_1, @people_id_2)
然后在命运插入到各个表中,注意正确的顺序以避免外键错误:
insert into Cities (name, id)
select distinct city_name, city_id
from transfer
insert into Addresses (street, zip)
select distinct street, zip
from transfer
insert into People (id, name)
select distinct people_id, name
from transfer
insert into Employee_Type (type, id)
select distinct type, type_id
from transfer
insert into Employees (id, people_id, type_id)
select distinct employee_id, employee_people_id, employee_type_id
from transfer