PostgreSQL 获取屏蔽用户名和被屏蔽用户
PostgreSQL obtain username of blocking and blocked users
我正在尝试获取阻止用户和被阻止用户的用户名,但我得到的是一个空数组。
这是我试过的:
select pid,
usename,
pg_blocking_pids(pid) as blocked_by, (select usename from
pg_stat_activity where pid=ANY(pg_blocking_pids(pid)))
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0;
嵌套 select 正在返回 [null]。
这是如果我查询 select 像这样手动插入 pid 值
select usename from pg_stat_activity where pid=ANY(pg_blocking_pids(14648));
我得到了我正在寻找的值。
我认为你需要一个关联子句:
select sa.pid, sa.usename,
pg_blocking_pids(sa.pid) as blocked_by,
(select sa2.usename
from pg_stat_activity sa2
where sa2.pid = ANY(pg_blocking_pids(sa.pid)))
from pg_stat_activity sa
where cardinality(pg_blocking_pids(sa.pid)) > 0;
如果您收到一条错误消息,指出子查询 returns 多于一行,您就会知道这是有效的。在这种情况下,将 array_agg()
添加到子查询。
我正在尝试获取阻止用户和被阻止用户的用户名,但我得到的是一个空数组。
这是我试过的:
select pid,
usename,
pg_blocking_pids(pid) as blocked_by, (select usename from
pg_stat_activity where pid=ANY(pg_blocking_pids(pid)))
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0;
嵌套 select 正在返回 [null]。
这是如果我查询 select 像这样手动插入 pid 值
select usename from pg_stat_activity where pid=ANY(pg_blocking_pids(14648));
我得到了我正在寻找的值。
我认为你需要一个关联子句:
select sa.pid, sa.usename,
pg_blocking_pids(sa.pid) as blocked_by,
(select sa2.usename
from pg_stat_activity sa2
where sa2.pid = ANY(pg_blocking_pids(sa.pid)))
from pg_stat_activity sa
where cardinality(pg_blocking_pids(sa.pid)) > 0;
如果您收到一条错误消息,指出子查询 returns 多于一行,您就会知道这是有效的。在这种情况下,将 array_agg()
添加到子查询。