假设有足够的磁盘 space,我可以在没有停机风险的情况下在实时生产数据库中创建索引吗?

Assuming there is enough disc space, can I create an index in a live production database without risk of downtime?

在 PostgreSQL 数据库中,假设有足够的磁盘 space,我可以在没有停机风险的情况下在实时生产数据库中创建索引吗?换句话说,创建索引时是否存在锁定或可能的崩溃或数据丢失或其他问题。

更准确地说,它是 1Gb table:

中 JSONB sub-属性 的索引
create index on foo((bar->>'region'));

我目前正在犹豫 运行 这个创建索引(它在我的机器上使用数据库示例没有问题)。

CREATE INDEX 将在 CREATE INDEX 语句期间阻止对 table 的写入,但 CREATE INDEX CONCURRENTLY 不会。 CONCURRENTLY 修饰符确实需要更多工作,但在这种情况下,它应该可以忽略不计(在初始扫描读取后不久重新读取 1GB)。

读取不受两种形式的 CREATE INDEX 的影响,除了在操作系统级别竞争 I/O。