0

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

我的问题是:

哪种解决方案更好:

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

2 回答 2

1

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

于 2013-07-23T01:16:00.013 回答
1

5:

  • 创建TEMPORARY临时表table2。临时表的性能要好得多(并且不会持久化)。
  • COPYfile2.csv 到它。
  • UPDATE表格1。

临时表在会话结束时自动删除。此处的代码示例:
如何判断 Postgres 中的记录是否已更改

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

于 2013-07-23T01:08:50.410 回答