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

Postgresql 触发或计算列或更新或查看,postgresql,database-design,Postgresql,Database Design,我有两个csv文件file1.csv和file2.csv我将这些文件加载到 数据库中的两个表“table1”和“table2”表1包含 两列,这些列使用表2列来计算它们的 值,然后可以删除表2的行,因为它 仅用于更新表1 我的问题是: 哪种解决方案更好: 当表2中的insert执行更新两列的触发器时 在表1中,从表2中删除当前行,因为它只使用了 计算表1的两列 删除表2,在加载文件2时只更新表1 将这两列创建为计算列,以便 仅虚拟列 创建由表1的所有列组成的视图,并添加两个计算 此视图中的列。你

我有两个csv文件
file1.csv
file2.csv
我将这些文件加载到 数据库中的两个表“
table1
”和“
table2
”<代码>表1包含
两列
,这些列使用
表2
列来计算它们的 值,然后可以删除表2的
行,因为它
仅用于
更新
表1

我的问题是:

哪种解决方案更好:

  • 当表2中的insert执行更新两列的触发器时 在表1中,从表2中删除当前行,因为它只使用了 计算表1的两列
  • 删除表2,在加载文件2时只更新表1
  • 将这两列创建为计算列,以便 仅虚拟列
  • 创建由表1的所有列组成的视图,并添加两个计算 此视图中的列。你可以提出另一个解决方案
  • 5:
    • 创建一个
      临时
      暂存表
      表2
      。临时表的性能要好得多(并且不会持久化)
    • 文件2.csv复制到其中
    • 更新
      表1
    临时表将在会话结束时自动删除。此处的代码示例:

    为了重复使用,您可以保留一个空的持久化
    表2
    作为临时表的模板,如链接答案中所示。

    或者甚至将其全部放入plpgsql函数中(我会这么做)。

    另一个选项是使用外部数据包装器从数据库中读取文件2.csv(无需加载),并将计算结果插入
    表1
    。这假设您使用的是Postgres 9.1+,并且您的file2.csv不是太大。然而,欧文的建议可能是最有用的解决办法