postgresql - 警告 : concurrent delete in progress within table while creating index in big table in Postgres 9. 2

标签 postgresql concurrency

我在 53 GB 的大表上创建索引时遇到问题,所以我多次尝试创建这个索引 代码是

do $$
begin
 if not exists (select * from pg_class where relname = 'index_usage_id_idx')       then
     create  index index_usage_id_idx on mytable (usage_id);
 end if; 
end $$;

在创建索引时,我在 pg_log 目录中得到了很多日志,错误如下,这些日志不会停止并公开超过 200 GB 的日志,以至于我的可用空间不足

2014-01-17 11:39:40 上下文:SQL 语句“在 mytable (usage_id) 上创建索引 index_usage_id_idx”
PL/pgSQL函数inline_code_block line 46 at SQL语句
2014-01-17 11:39:40 警告:表“mytable”中正在进行并发删除

为什么要同时删除一些东西?

最佳答案

另一个并发事务正在尝试从表中删除行。

通过更改应用程序逻辑或创建规则以某种方式推迟这些删除。

CREATE RULE
  _delete
AS ON
  delete
TO
  mytable
DO INSTEAD
  INSERT INTO my_table_to_be_deleted_later (...) VALUES (OLD...);

在那种情况下,您可能还需要暂时删除 FOREIGN KEY 约束(如果 my_table 引用另一个表或正在被引用)。

或者,尝试 CREATE INDEX CONCURRENTLY .

关于postgresql - 警告 : concurrent delete in progress within table while creating index in big table in Postgres 9. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178917/

相关文章:

postgresql - 时区感知 date_trunc 函数

ruby-on-rails - 将 postgres 数据库转储导入本地应用程序

c# - 并发字典多次写入

postgresql - jsonb类型的plv8存储过程

postgresql - Adminer & Migrate 无法连接到 Postgresql Docker 容器

ruby-on-rails - 我如何获得在 rake 任务中工作的 Rails 控制台中工作的 Active Record 查询?

c# - 使用时间戳跟踪并发 Web 服务请求

sql - 插入到没有序列列的空表时出现重复键约束错误

java - 以原子方式确保 ConcurrentMap 条目

postgresql - 在两个并发 READ COMMITTED 数据库事务中锁定新创建的未提交行