Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Heroku超级用户查询阻止我获得AccessExclusiveLock。我怎样才能放下桌子?_Postgresql_Heroku - Fatal编程技术网

Postgresql Heroku超级用户查询阻止我获得AccessExclusiveLock。我怎样才能放下桌子?

Postgresql Heroku超级用户查询阻止我获得AccessExclusiveLock。我怎样才能放下桌子?,postgresql,heroku,Postgresql,Heroku,我使用的是一个Heroku管理的psql数据库,它为生产流量提供服务。我想删除“Foo”表: 删除表“Foo” 当然,此语句需要表“Foo”上的AccessExclusiveLock。我无法获取此锁,因为其他进程持有AccessSharedLock 通过查找持有锁的进程(使用查询),我能够识别两个在表Foo上持有AccessSharedLocks并阻止我的查询的进程。一是: WITH table_scans as ( SELECT relid, tables.idx_sc

我使用的是一个Heroku管理的psql数据库,它为生产流量提供服务。我想删除“Foo”表:

删除表“Foo”

当然,此语句需要表“Foo”上的AccessExclusiveLock。我无法获取此锁,因为其他进程持有AccessSharedLock

通过查找持有锁的进程(使用查询),我能够识别两个在表Foo上持有AccessSharedLocks并阻止我的查询的进程。一是:

WITH table_scans as (
    SELECT relid,
        tables.idx_scan + tables.seq_scan as all_scans,
        ( tables.n_tup_ins + tables.n_tup_upd + tables.n_tup_del ) as writes,
                pg_relation_size(relid) as table_size
        FROM pg_stat_user_tables as tables
),
all_writes as (
    SELECT sum(writes) as total_writes
    FROM table_scans
),
indexes as (
    SELECT idx_stat.relid, idx_stat.indexrelid,
        idx_stat.schemaname, idx_stat.relname as tablename,
        idx_stat.indexrelname as indexname,
        idx_stat.idx_scan,
        pg_relation_size(idx_stat.indexrelid) as index_bytes,
        indexdef ~* 'USING btree' AS idx_is_btree
    FROM pg_stat_user_indexes as idx_stat
        JOIN pg_index
            USING (indexrelid)
        JOIN pg_indexes as indexes
            ON idx_stat.schemaname = indexes.schemaname
                AND idx_stat.relname = indexes.tablename
                AND idx_stat.indexrelname = indexes.indexname
    WHERE pg_index.indisunique = FALSE
),
index_ratios AS (
查询的其余部分不可用,因为track_activity_query_size的设置无法在Heroku psql实例上更改

第二个是用户postgres运行的神秘查询。我无法在pg_stat_活动中查看此查询。相反,我看到的是
。我也无法从heroku pg:ps
中找到有关此查询的任何信息

我最好的猜测是,这要么是自动真空运行,要么是Heroku的度量生成查询

我可以使用
pg\u terminate\u backend
终止(1)类型的查询,但它们会不断出现。我无法终止(2)类型的查询


我该怎么办?这些阻塞查询正在阻止我的
删除表
请求。等待他们出来似乎不是一个可行的选择——我的请求已经被阻止了24小时。

我直接向Heroku寻求帮助。事实上,问题在于长期存在的博士后自动真空。此过程由超级用户控制,Heroku用户无权访问超级用户

Heroku代表我采取了以下行动: (1) 截断表格 (2) 关掉自动吸尘器


然后我可以放下桌子。

我直接向Heroku寻求帮助。事实上,问题在于长期存在的博士后自动真空。此过程由超级用户控制,Heroku用户无权访问超级用户

Heroku代表我采取了以下行动: (1) 截断表格 (2) 关掉自动吸尘器

然后我就可以放下桌子了