【发布时间】:2021-09-05 06:06:50
【问题描述】:
我想做这样的事情:
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);
如何保留列存在的条件?
飞路4.2.0;
【问题讨论】:
-
IIRC,你需要使用两个单独的脚本(即
CREATE INDEX CONCURRENTLY必须在一个脚本中单独存在,否则Flyway在没有事务的情况下无法运行)
标签: java postgresql flyway postgresql-9.2