Postgres flyway同时创建索引错误
Postgres flyway create concurrently index error
我想做类似的事情:
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) = (, , ));
$$ 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; $$;
但是有
ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block
如果我只写就可以正常工作
CREATE INDEX CONCURRENTLY IF NOT EXISTS column_idx ON table_name USING btree (column_name);
如何保留列存在的条件?
飞路 4.2.0;
你为什么用这么老的flyway?
您应该先升级您的flyway版本,然后:
像V01_001__my_script.sql.conf一样为你的脚本创建一个配置文件
其中 V01_001__my_script.sql 是您的 sql 文件的名称。
并将这一行放在里面:
executeInTransaction=false
这将禁止在交易中执行此脚本。
我想做类似的事情:
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) = (, , ));
$$ 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; $$;
但是有
ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block
如果我只写就可以正常工作
CREATE INDEX CONCURRENTLY IF NOT EXISTS column_idx ON table_name USING btree (column_name);
如何保留列存在的条件?
飞路 4.2.0;
你为什么用这么老的flyway? 您应该先升级您的flyway版本,然后:
像V01_001__my_script.sql.conf一样为你的脚本创建一个配置文件 其中 V01_001__my_script.sql 是您的 sql 文件的名称。
并将这一行放在里面:
executeInTransaction=false
这将禁止在交易中执行此脚本。