在插入行时询问用户是否具有触发/功能的值

时间:2017-11-28 11:33:38

标签: postgresql function triggers

我正在努力实现这个目标:

我想在postgres中创建触发器/函数。在插入某行之前,请在某个提示窗口中询问用户某些值。例如,我想这样做:

insert into x (a, b, c) values (aa, bb, '');

默认情况下,值c应为null,但在插入时,用户可以填充它。因此,在插入一个空值为c trigger的行时,会要求用户填写它。

有可能吗?做这个的最好方式是什么? 我在想这样的事情:

CREATE FUNCTION my_trigger_function()
RETURNS trigger AS '
BEGIN
  IF NEW.C1 IS NULL OR NEW.C1 = '''' THEN
    NEW.C1 := (HERE I WOULD LIKE TO CALL PROMPT WINDOW);
  END IF;
  RETURN NEW;
END' LANGUAGE 'plpgsql'

CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
    EXECUTE PROCEDURE my_trigger_function()

1 个答案:

答案 0 :(得分:1)

正如@Vao所说,PostgreSQL触发器没有提示。那么使用custom defined parameters呢?

--Sets a run-time configuration parameter 
SELECT set_config('myapp.conf', 'Test', TRUE);

CREATE FUNCTION my_trigger_function()
RETURNS trigger AS $$
BEGIN
  --Gets the parameter  
  NEW.C1 := COALESCE(NULLIF(NEW.C1, ''), current_setting('myapp.conf', FALSE));
  RETURN NEW;
END$$ LANGUAGE 'plpgsql';

CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
    EXECUTE PROCEDURE my_trigger_function();