【问题标题】:is there a way to create a trigger on adding columns?有没有办法在添加列时创建触发器?
【发布时间】:2023-03-23 10:46:02
【问题描述】:

我正在使用 Postgres。我正处于开发的中间。我需要创建表 ABC 的副本。我将其命名为 XYZ。我试过create table XYZ () inherits(ABC)。它工作正常,但是当我在 XYZ 上插入值时,表 ABC 也被填充(实际上)。当我运行类似select * from ABC where id = 1 的查询时,我得到了重复的值。当我像select * from only ABC where id = 1 这样运行查询时,我得到了正确的记录。

这是,我不想使用“仅”。所以,我不认为继承是我需要的。我只想问当我更改(添加列)ABC时是否有办法在XYZ上自动添加列?

我不想为 ABC 和 XYZ 创建两个 alter 查询。我需要这两个表始终具有相同的列。有什么想法吗?

【问题讨论】:

  • 我需要两个表始终具有相同的列” - 我不明白为什么您不简单地使用单个表然后加上一个视图。如果您描述您正在尝试解决的真正潜在问题,而不是您在技术实现方面遇到的问题,那会更好
  • 我想先使用第二个表。这是我正在做的事情的场景。
  • 我想先使用第二个表。这是我正在做的场景:
    第 1 页上有一个链接。通过单击该链接,表 ABC 上的单个记录将插入到表 XYZ 上(通过此:'insert into XYZ as select * from ABC' ) 然后页面重定向到第 2 页。在 XYZ 上插入的记录将是第 2 页上使用的记录。如果“已编辑”,则将编辑 XYZ。如果“保存并完成”,XYZ 上的值将修改驻留在 ABC 上的记录。所以基本上,表 XYZ 只是一个临时表。我在第 2 页上有三个按钮。
  • “编辑”、“保存”和“保存并完成”。单击编辑或保存只会修改 XYZ(不是 ABC)。单击“保存并完成”将修改 XYZ 然后 ABC。
  • 创建一个标志completed 以区分“已保存”和“已完成”。然后在您的查询中包含where not completedwhere completed。 (或创建两个视图:completed_itemsopen_items 执行此操作)

标签: postgresql ddl-trigger


【解决方案1】:

您所说的触发器类型通常称为 DDL 触发器。在 PostgreSQL 中,它们被称为event triggers。不过,我不确定您是否可以在 PostgreSQL 事件触发器中执行 alter table 语句。

不过,我不确定这是否是真的您正在寻找的解决方案。我想你可能正处于X-Y problem 的中间。

【讨论】:

  • 我的团队负责人也认为我必须搜索如何在“alter table”上创建触发器。同时,我在代码上创建了一个“更改表”函数来获取 table1 的所有名称和类型,然后在 table2 上添加不存在的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2012-03-02
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多