2014-10-09 41 views
0

我想知道如果我可以使用PostgrSQL触发器更新列的日期类型列,并在这一天我想更新另一个列中的另一列。根据特定日期更新postgresql中的列

为了更清楚

我有2个表

Works_locations表

walphid   wnumberid locationid 
DRAR   1012   101 
PAPR   1013   105 
PAHF   1014   105 
ETAR   1007   102 
DRWS   1007   102 

的locationsid属性是指在位置表“LOCID”,这是下跌

locid locname  
101  Storage 
102  Gallary A 
103  Gallary B 
104  Gallary C 
105  Lobby 

展览桌

exhid  exhname  description  strtdate  endDate 
101   Famous   Blah Blah  2013-07-15  2013-10-13 

,这里是桥台展览台与地方台

locationsid  exhibitid 
102    102 
103    101 
104    103 

连接现在,每个展览都有一些作品,应放置在位置表的一个。

在展览表(即日期数据类型)的'endDate'列中,我想更新Works locations表中的'locationid'列以将其放置在另一个位置。

换句话说。每个展览都有一些作品,这些作品都放在其中一个位置。在展览结束的时候,我想改变位置,具体而言,我希望将作品返回存储。

任何想法我会如何做这个动作与PostgreSQL?

Regard

+0

当“exhibition”,“endDate”发生变化时,您可以编写触发器更新“工作地点”。在[docs](http://www.postgresql.org/docs/9.3/static/sql-createtrigger.html)中有例子。 (向下滚动。)不清楚a)您想要更改“工作地点”中的哪一行,以及b)当前日期(或某个当前日期列)与此有什么关系。 – 2014-10-09 02:55:14

+0

我只想知道如何做这种基于当前日期的事情。我以前看过那个网页,但是我没有找到答案 – Alex 2014-10-09 03:50:28

+0

你的问题在美国英语中没有意义。基于当前日期*的短语不清楚。您需要更具体地了解a)要更新的表和列,b)希望更新哪些值,以及c)何时更新它们。 – 2014-10-09 04:14:41

回答

4

PostgreSQL没有内置的任务调度程序。即使有调度程序,它运行的命令也不会触发,它们只是由调度程序运行的过程。

您无法编写在某个任意时间触发的触发器。

您将需要使用cron,任务计划程序,PgAgent或类似的程序在所需的时间运行语句。或者你可以编写一个脚本来检查下一个事件的发生时间,在此之前睡眠,运行所需的命令并将该事件标记为已完成,然后休眠直到下一个事件。

+0

非常感谢。我现在明白了 – Alex 2014-10-10 03:27:25