【问题标题】:trigger or calculated columns or update or view触发或计算列或更新或查看
【发布时间】:2013-07-23 00:07:45
【问题描述】:

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

我的问题是:

哪种方案更好:

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

【问题讨论】:

    标签: postgresql database-design


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      5:

      • 创建一个TEMPORARY 暂存表table2。临时表的性能要好得多(并且不会持久化)。
      • COPYfile2.csv 进去。
      • UPDATEtable1。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 2014-07-10
        • 2013-01-24
        相关资源
        最近更新 更多