我们收到以下错误:null,同时尝试运行此SQL脚本

时间:2016-11-20 12:17:27

标签: sql postgresql scala playframework slick

我在新的Scala Play-Slick项目上运行激活器时,从Play Evolutions获得上述错误。我使用Postgres服务器版本9.3和最新的JDBC驱动程序9.4。我的1.sql文件如下所示:

# schema

# --- !Ups

CREATE TABLE country (
    id BIGINT,
    name VARCHAR(100),
    iso2 CHAR(2),
    modified TIMESTAMP DEFAULT now(),
    PRIMARY KEY (id)
);

CREATE OR REPLACE FUNCTION update_modified()
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

CREATE TRIGGER trigger_country_modified BEFORE UPDATE ON country FOR EACH ROW EXECUTE PROCEDURE update_modified();

# --- !Downs

DROP TABLE country CASCADE;

DROP FUNCTION update_modified_column;

通过反复试验,我发现Evolutions并不能很好地理解本地Postgres触发函数update_modified。我该如何解决或绕过这个问题?

1 个答案:

答案 0 :(得分:1)

Play evolution插件将.sql文件拆分为一系列以分号分隔的语句,然后逐个对数据库执行。

当您在函数 update_modified()代码中使用分号时,您必须通过输入两次 ;; 来转义它。见下文:

CREATE OR REPLACE FUNCTION update_modified()
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified = now();;
    RETURN NEW;;
END;;
$$ language 'plpgsql';