Postgres flyway 创建并发索引错误

问题描述

我想做类似的事情:

CREATE OR REPLACE FUNCTION __column_exists(TEXT,TEXT,TEXT) RETURNS bool as $$
SELECT exists(SELECT 1 FROM information_schema.columns WHERE (table_schema,table_name,column_name) = ($1,$2,$3));
$$ language sql STRICT;

DO $$ BEGIN IF __column_exists('public','table_name','column_name') THEN
CREATE INDEX CONCURRENTLY IF NOT EXISTS column_idx ON table_name USING btree (column_name);
END IF; END; $$;

但是有

错误:CREATE INDEX CONCURRENTLY 不能在事务块内运行

如果我只写它就可以了

CREATE INDEX CONCURRENTLY IF NOT EXISTS column_idx ON table_name USING btree (column_name);

如何保留列存在的条件?

Flyway 4.2.0;

解决方法

你为什么使用这么旧版本的 flyway ? 您应该先升级您的 flyway 版本,然后:

为你的脚本创建一个配置文件,比如 V01_001__my_script.sql.conf 其中 V01_001__my_script.sql 是您的 sql 文件的名称。

并把这一行放在里面:

executeInTransaction=false

这将禁用此脚本在事务中的执行。