触发或计算列或更新或查看

时间:2013-07-23 00:07:45

标签: postgresql database-design

我有两个csv文件file1.csvfile2.csv我加载了这些文件 数据库“table1”和“table2”中的两个表。 table1包含 two columns,这些列使用table2列来计算它们 值,然后可以删除table2行,因为它 仅用于update table1

我的问题是:

哪种解决方案更好:

  1. 当table2中的insert执行更新两列的触发器时 在table1中然后删除table2中的当前行,因为它只使用了 计算table1的两列。
  2. 删除table2并在加载file2时更新table1。
  3. 将两列创建为计算列,因此它们将是 仅限虚拟列。
  4. 创建由table1的所有列组成的视图并添加两个计算 此视图中的列。您可以提出另一种解决方案

2 个答案:

答案 0 :(得分:1)

5

  • 创建TEMPORARY临时表table2。临时表执行得更好(并且不会持久化)。
  • COPY file2.csv。
  • UPDATE table1。

临时表会在会话结束时自动删除。代码示例:
How to tell if record has changed in Postgres

对于重复使用,您可以将一个空的持久table2作为临时表的模板,如链接答案中所示。
或者甚至将所有这些都放入plpgsql函数中(这就是我要做的)。

答案 1 :(得分:1)

另一种选择是使用file_fdw FOREIGN DATA WRAPPER从db中读取file2.csv(无需加载)并将计算结果插入table1。这假设您正在使用Postgres 9.1+,并且您的file2.csv不是太大。然而,Erwin的建议可能是最有用的解决方案。