Postgres触发功能错误

时间:2016-09-06 22:39:55

标签: postgresql database-trigger

我正在尝试在postgress 9.5中编写一个触发器函数。但是我在尝试执行脚本时遇到错误。

我的触发器:

CREATE TABLE batch (
  id bigserial PRIMARY KEY,
  batch_type varchar(60) NOT NULL,
  external_id varchar(255),
  status varchar(20) NOT NULL,
  CONSTRAINT unique_external_id UNIQUE(batch_type,external_id)
);

      CREATE TABLE batch_wip (
      batch_id BIGINT NOT NULL,
      PRIMARY KEY (batch_id)
    );

    CREATE OR REPLACE FUNCTION insert_records_into_batch_wip()
      RETURNS trigger AS
    $BODY$
    BEGIN
      IF NEW.status = 'STARTED' THEN
        INSERT INTO batch_wip(batch_id) VALUES(NEW.id);
      END IF;
      RETURN NEW;
    END;
    $BODY$
    LANGUAGE plpgsql;

    CREATE TRIGGER new_batch_record_inserts
      AFTER INSERT
      ON batch
      FOR EACH ROW
      EXECUTE PROCEDURE insert_records_into_batch_wip();

错误Iam,

执行flywayMigrate时发生错误

迁移V14__add_work_in_progress_table_and_trigger.sql失败

SQL State:42001   错误代码:42001   消息:SQL语句中的语法错误" CREATE OR REPLACE FUNCTION [*] INSERT_RECORDS_INTO_BATCH_WIP()     返回触发器AS   $ BODY $   BEGIN

IF NEW.STATUS = 'STARTED' THEN
  INSERT INTO BATCH_WIP(BATCH_ID) VALUES(NEW.ID) "; expected "FORCE, VIEW, ALIAS, SEQUENCE, USER, TRIGGER, ROLE, SCHEMA, CONSTANT, DOMAIN, TYPE, DATATYPE, AGGREGATE, LINKED, MEMORY, CACHED, LOCAL, GLOBAL, TEMP, TEMPORARY, TABLE, PRIMARY, UNIQUE, HASH, SPATIAL, INDEX"; SQL statement:

创建或替换功能insert_records_into_batch_wip()     RETURNS触发AS   $ BODY $   开始     如果NEW.status =' STARTED'然后       INSERT INTO batch_wip(batch_id)VALUES(NEW.id)[42001-191]   位置:/Users/bla/migration/V14__add_work_in_progress_table_and_trigger.sql(/Users/bla/migration/V14__add_work_in_progress_table_and_trigger.sql)   行:11   声明:创建或替换功能insert_records_into_batch_wip()     RETURNS触发AS   $ BODY $   BEGIN

IF NEW.status = 'STARTED' THEN
  INSERT INTO batch_wip(batch_id) VALUES(NEW.id)

有人能弄清楚我的sql脚本有什么问题吗?

0 个答案:

没有答案