PostgreSQL:动态行值(?)

时间:2010-06-23 10:30:58

标签: postgresql dynamic insert row

哦,你好! 我有两个表,第一个(让我们称之为NameTable)预设有一组值(id,name),第二个(ListTable)是空的但具有相同的列。
问题是:如何在ListTable中插入一个来自NameTable的值?因此,如果我在NameTable中更改一个名称,那么自动更新ListTable中的值也是如此。
是否存在INSERT或是否必须以某种特殊方式创建表格? 尝试浏览手册但没有成功:(

2 个答案:

答案 0 :(得分:1)

使用INSERT ... SELECT的建议是在同一数据库中的表之间移动的最佳方法。

但是,还有另一种方法可以处理自动更新要求。

听起来这些是您的标准:

  • 表A由列(x,y)
  • 定义
  • (x,y)是唯一的
  • 表B也用列(x,y)
  • 定义
  • 表A是表B的超集
  • 表B将加载表A中的数据,需要与表A中的UPDATE保持同步。

这是FOREIGN KEY的作业,选项为ON UPDATE CASCADE:

ALTER TABLE B ADD FOREIGN KEY (x,y) REFERENCES A (x,y) ON UPDATE CASCADE;

现在,当表A更新时,它不仅会自动更新表B,还会保护表B不包含表A中不存在的(x,y)对。如果您希望从表中自动删除记录B从表A中删除时,添加“ON UPDATE DELETE”。

答案 1 :(得分:0)

嗯......我对你想要做什么或为什么感到有点困惑,但是这里有一些关于你可能想要看一下的事情的指针:表继承,触发器和规则。

postgresql中的表继承允许表共享另一个表的数据。因此,如果向基表中添加一行,它将不会显示在继承的表中,但如果向继承的表中添加一行,它现在将显示在两个表中,并且任何一个地方的更新都将反映它在两个表中。

触发器允许您设置在表上发生插入,更新或删除操作时将运行的代码。这将允许您添加手动描述的行为。

规则允许您设置一个规则,当满足特定条件时,该规则将使用备用查询替换匹配查询。

如果你进一步描述你的问题,为什么你想要这种行为,可能更容易建议正确的方法: - )