首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Beego迁移:并发创建索引不起作用

Beego迁移:并发创建索引不起作用
EN

Stack Overflow用户
提问于 2021-09-30 19:15:35
回答 1查看 81关注 0票数 0
代码语言:javascript
复制
package main

import (
    "github.com/beego/beego/v2/client/orm/migration"
)

// DO NOT MODIFY
type AddConstraintToUser_20210928_223906 struct {
    migration.Migration
}

// DO NOT MODIFY
func init() {
    m := &AddConstraintToUser_20210928_223906{}
    m.Created = "20210928_223906"

    migration.Register("AddConstraintToUser_20210928_223906", m)
}

// Run the migrations
func (m *AddConstraintToUser_20210928_223906) Up() {
    // use m.SQL("CREATE TABLE ...") to make schema update
    m.SQL("END;" +
        "CREATE UNIQUE INDEX  CONCURRENTLY IF NOT EXISTS uniq_email ON users (email) WHERE status_id=1;" +
        "CREATE UNIQUE INDEX  CONCURRENTLY IF NOT EXISTS uniq_name ON users (name) WHERE status_id=1;" +
        "BEGIN;")
}

// Reverse the migrations
func (m *AddConstraintToUser_20210928_223906) Down() {
    // use m.SQL("DROP TABLE ...") to reverse schema update
    m.SQL("END;" +
        "DROP INDEX CONCURRENTLY IF EXISTS uniq_email;" +
        "DROP INDEX CONCURRENTLY IF EXISTS  uniq_name;" +
        "BEGIN;")
}

这是我的迁移文件。在运行bee migrate时,它抛出了一个错误:

代码语言:javascript
复制
2021/09/29 04:26:03 INFO     ▶ 0001 Using 'postgres' as 'driver'
2021/09/29 04:26:03 INFO     ▶ 0002 Using '/Users/aashishpassrija/go/src/users/database/migrations' as 'dir'
2021/09/29 04:26:03 INFO     ▶ 0003 Running all outstanding migrations
2021/09/29 04:26:08 INFO     ▶ 0004 |> 2021/09/29 04:26:06.018 [I]  start upgrade AddConstraintToUser_20210928_223906
2021/09/29 04:26:08 INFO     ▶ 0005 |> 2021/09/29 04:26:06.018 [I]  exec sql: END;CREATE UNIQUE INDEX  CONCURRENTLY IF NOT EXISTS uniq_email ON users (email) WHERE status_id=1;CREATE UNIQUE INDEX  CONCURRENTLY IF NOT EXISTS uniq_name ON users (name) WHERE status_id=1;BEGIN;
2021/09/29 04:26:08 INFO     ▶ 0006 |> 2021/09/29 04:26:06.018 [E]  execute error: pq: CREATE INDEX CONCURRENTLY cannot run inside a transaction block
2021/09/29 04:26:08 ERROR    ▶ 0007 Could not run migration binary: exit status 2

现在我知道索引不能在事务内并发创建。但考虑到我的数据库很大。我该如何实现这一点?是否有用于beego的等价物disable_ddl_transaction

EN

回答 1

Stack Overflow用户

发布于 2021-09-30 20:54:33

如果您向服务器发送多个用分号分隔的语句,则这些语句都将在单个事务中运行。但是您不能在多语句事务中运行CREATE INDEX CONCURRENTLY

启用自动提交(如果禁用),并单独运行每个CREATE INDEX CONCURRENTLY

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69397759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档