【发布时间】: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 completed或where completed。 (或创建两个视图:completed_items和open_items执行此操作)