CREATE FUNCTION schemaone.get_pg_stat_activity() RETURNS SETOF pg_stat_activity
    LANGUAGE sql SECURITY DEFINER
    AS $$ SELECT * FROM pg_catalog.pg_stat_activity; $$;
    
CREATE VIEW schematwo.pg_stat_activity AS
SELECT 
    get_pg_stat_activity.datid,
    get_pg_stat_activity.datname,
    get_pg_stat_activity.pid,
    get_pg_stat_activity.usesysid,
    get_pg_stat_activity.usename,
    get_pg_stat_activity.application_name,
    get_pg_stat_activity.client_addr,
    get_pg_stat_activity.client_hostname,
    get_pg_stat_activity.client_port,
    get_pg_stat_activity.backend_start,
    get_pg_stat_activity.xact_start,
    get_pg_stat_activity.query_start,
    get_pg_stat_activity.state_change,
    get_pg_stat_activity.wait_event_type,
    get_pg_stat_activity.wait_event,
    get_pg_stat_activity.state,
    get_pg_stat_activity.backend_xid,
    get_pg_stat_activity.backend_xmin,
    get_pg_stat_activity.query,
    get_pg_stat_activity.backend_type
FROM schemaone.get_pg_stat_activity() get_pg_stat_activity(datid, datname, pid, usesysid, usename, application_name, client_addr, client_hostname, client_port, backend_start, xact_start, query_start, state_change, wait_event_type, wait_event, state, backend_xid, backend_xmin, query, backend_type);

我在这里有这些查询;当我try 使用pg_Restore时,我得到以下错误.

10:33:56 1251111 ERROR string_utils.c:650
pg_restore: error: could not execute query: ERROR: column reference "query" is ambiguous
10:33:56 1251111 ERROR string_utils.c:650
LINE 20: get_pg_stat_activity.query,

推荐答案

您可能正在try 在别名中重新使用PostgreSQL版本10-12的pg_stat_activity定义,同时在version 14+上,以便别名列表与输出列的名称和数量不匹配,从而导致冲突的两个零散的、未加别名的列.Demo:

ordinal_position source_column your_alias is_equal name_shifted_by
1 datid datid t 0
2 datname datname t 0
3 pid pid t 0
4 leader_pid usesysid f 1
5 usesysid usename f 1
6 usename application_name f 1
7 application_name client_addr f 1
8 client_addr client_hostname f 1
9 client_hostname client_port f 1
10 client_port backend_start f 1
11 backend_start xact_start f 1
12 xact_start query_start f 1
13 query_start state_change f 1
14 state_change wait_event_type f 1
15 wait_event_type wait_event f 1
16 wait_event state f 1
17 state backend_xid f 1
18 backend_xid backend_xmin f 1
19 backend_xmin query f 2
20 query_id backend_type f 2
21 query query (2) f 0
22 backend_type backend_type (2) f 0

pg_stat_activity的第4列是leader_pid,如果在列表中省略它,您仍然会 Select 它,但会将其重命名为usesysid,并将后面的所有列名向上/向左移动.第20列是query_id,您也跳过了,所以在结束时,您仍然通过schemaone.get_pg_stat_activity()函数 Select pg_stat_activity中的所有内容,但将第4-20列重命名,然后保留最后两列的未别名,它们恰好是querybackend_type.

因此,由此产生的最后4列:

schemaone.get_pg_stat_activity() get_pg_stat_activity(datid, datname, pid, usesysid, usename, application_name, client_addr, client_hostname, client_port, backend_start, xact_start, query_start, state_change, wait_event_type, wait_event, state, backend_xid, backend_xmin, query, backend_type);

query,backend_type,query,backend_type,引发了冲突.

您需要使您的别名匹配:

CREATE VIEW schematwo.pg_stat_activity2 AS
SELECT *
FROM schemaone.get_pg_stat_activity() get_pg_stat_activity(datid, datname, pid, leader_pid, usesysid, usename, application_name, client_addr, client_hostname, client_port, backend_start, xact_start, query_start, state_change, wait_event_type, wait_event, state, backend_xid, backend_xmin, query_id, query, backend_type);

或者完全删除该列表

CREATE VIEW schematwo.pg_stat_activity AS
SELECT *
FROM schemaone.get_pg_stat_activity() AS get_pg_stat_activity;

Postgresql相关问答推荐

横向联接返回的行数太多

如何诊断字符编码问题

我可以将jsonb_set与来自SELECT语句的新值(第三个参数)一起使用吗?

如何在 postgres where 子句中使用 or 对条件进行组合或分组

即使存在 GIN 索引,整理默认的类似查询也无法执行

如何创建一个触发器来传播对主键表的更新?

如何在 sequelize 使用 db postgres 中通过外键更新记录和更新包含许多记录关系

我应该 Select 哪种数据类型?

PostgreSQL:如何避免被零除?

如何将两条线几何连接成一条记录?

Postgres 会话处于空闲状态,query = COMMIT 或 ROLLBACK

计算 PostgreSQL 中给定 GPS 坐标的日出和日落时间

在 CentOS 上安装 psycopg2 时遇到问题

使用 postgres regexp_replace 将字符串列表替换为始终相同的字符串

如何 Select 列值为空的行?

如何使用字符串作为 PostgreSQL 咨询锁的键?

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

PL/pgSQL 中的 BREAK 语句

PostgreSQL 多种认证方式