从 postgresql 数据库中选择值并根据我需要完整查询插入/更新
Posted
技术标签:
【中文标题】从 postgresql 数据库中选择值并根据我需要完整查询插入/更新【英文标题】:select the values from the postgresql database and insert/update based on that i need complete query 【发布时间】:2013-06-11 16:00:00 【问题描述】:我需要在查询级别进行设计,是否可以对表中的版本、已删除、标记列执行此操作。
src_emp---->源表
empno,ename,sal
1 ,aaa ,1000
2 ,bbb ,2000
3 ,ccc ,3000
第一次加载目标表 trg_emp 输出如下所示
empkey,empno,ename,sal ,version,flag,deleted
1 ,1 ,aaa ,1000 ,1 ,Y ,N
2 ,2 ,bbb ,2000 ,1 ,Y ,N
3 ,3 ,ccc ,3000 ,1 ,Y ,N
现在,在这样做之后,我会将 empno=3 的薪水更改为 sal=4000 然后更新我的目标表后看起来像
empkey,empno,ename,sal ,version,flag,deleted
1 ,1 ,aaa ,1000 ,1 ,Y ,N
2 ,2 ,bbb ,2000 ,1 ,Y ,N
3 ,3 ,ccc ,3000 ,1 ,N ,N
4 ,3 ,ccc ,4000 ,2 ,Y ,N
您可以在上面观察到 empno=3 的版本增加到 2 并且最后一行的标志已更改为“Y”,而前一行的标志已更改为 empno=3 的“N” 好的,一旦版本和标志起作用,如果在源中删除任何记录,则删除第三个,然后该标志必须变为“Y” 假设如果我在源表中删除 empno=2 那么我的最终目标表应该如下格式
empkey,empno,ename,sal,version,flag,deleted
1,1,aaa,1000,1,Y,N
2,2,bbb,2000,1,Y,Y
3,3,ccc,3000,1,N,N
4,3,ccc,4000,2,Y,N
在目标表第二行标志必须更新已删除标志值为“Y”。
【问题讨论】:
我不清楚你的问题是什么。您是否尝试使用第一个和第三个列表来获取最后一个列表?另外你真的同时使用 mysql 和 postgresql 吗? 我同意康拉德弗里克斯的观点。我不明白你在问什么,或者你想在这里完成什么。您应该清楚地说明您的问题、遇到的任何错误以及您使用的技术(和版本)。 如果这就是应该始终修改该表的方式,我会使用存储过程来完成这项工作。 (他们在 PostgreSQL 中调用 存储函数 吗?)无论如何,我附议@Conrad 关于在 MySQL 和 PostgreSQL 中是否需要这个的问题。你是不是误加了mysql
标签?
【参考方案1】:
如果我理解您的问题,您可以通过使用 postgresql 的 TRIGGERS 来强制执行这种行为。 您必须在引用触发器函数的表中创建触发器。
有关在此处创建触发器的更多信息: http://www.postgresql.org/docs/current/static/sql-createtrigger.html
以及有关在此处创建触发器函数的信息: http://www.postgresql.org/docs/current/static/plpgsql-trigger.html
【讨论】:
我错误地在亚马逊redshift中添加了我需要的mysql,它不支持任何触发器或程序。Postgre和reshift都是一样的,唯一的区别是触发器和程序不可用。这就是我提到的作为一个postgresql 多次阅读您的评论后,我仍然无法理解您想要什么...请更清楚您正在使用的数据库以及您面临的问题,请用可读的英语。以上是关于从 postgresql 数据库中选择值并根据我需要完整查询插入/更新的主要内容,如果未能解决你的问题,请参考以下文章