使用从postgreSQL中的视图获取的数据写入多个表?

时间:2013-07-19 20:17:25

标签: sql postgresql postgresql-9.1

我是SQL的新手,我有一个需要清理的大型数据库。格式化的方式如下:每个表都有一个包含ID号的列,第二列包含一些其他类型的信息,如下所示。

  1. 名称:ID#Name
  2. 电子邮件:ID#Email
  3. 电话:ID#电话
  4. 注意:ID#Note
  5. 我有一个视图,显示来自所有这些表的信息(在实际数据库中有大约90个)和一些代码,它们将每个'Note'并将其处理为各个组件。这些笔记基本上是所有其他信息的混合,并带有典型的笔记:

    First M. Last, Position Title, Phone 123-456-7890, Email abc@def.com
    

    我现在拥有的代码是迭代视图中的所有注释(约300万)并识别每个元素(电话,电子邮件等),但现在我需要将这些元素写入各自的列在数据库的其他表中。我知道你不能写到一个视图,因为你可以到一个表,我不知道这个看到的最佳策略是什么,因为我有很多要处理的注释。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

实际上,如果您定义了适当的DO INSTEAD触发器(较新的Pg版本)或RULE(旧版本),可以写入视图。

但是,在这种情况下,我建议从视图中提取您希望更改为新表的数据(UNLOGGED如果使用PostgreSQL 9.1+)。然后,我将编写一系列UPDATE ... FROM语句,每个语句对应每个要更新的表,并根据更改信息表进行连接。

如果这不可行,另一种方法是使用PL / PgSQL过程来缓慢但更难以完成,只需从PL / PgSQL程序中获取,或者从视图中创建一个临时表,在所有关联的表中更新它们,再抓几行,然后重复。