我在新的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
。我该如何解决或绕过这个问题?
答案 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';