通过Spring Data JPA访问Postgres pg_catalog模式

问题描述

我正在编写一个用于生成数据库统计信息的应用程序。这需要访问名为pg_catalog的模式。我目前正在使用Spring Boot Data JPA通过@ Repository,@ Entity和@Table批注进行访问。由于我仅在此应用程序中访问单个架构,因此我正在设置属性

require()

在applicaton.properties文件中。

具体来说,我正在尝试从pg_stats_activity视图中提取数据。该视图定义为:

spring.jpa.properties.hibernate.default_schema = pg_catalog

存储库和实体类定义为:

create or replace view pg_catalog.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) as
SELECT s.datid,d.datname,s.pid,s.usesysid,u.rolname AS usename,s.application_name,s.client_addr,s.client_hostname,s.client_port,s.backend_start,s.xact_start,s.query_start,s.state_change,s.wait_event_type,s.wait_event,s.state,s.backend_xid,s.backend_xmin,s.query,s.backend_type
FROM pg_stat_get_activity(NULL::integer) s(datid,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,sslclientdn)
LEFT JOIN pg_database d ON s.datid = d.oid
LEFT JOIN pg_authid u ON s.usesysid = u.oid;

应用程序无法启动并显示错误

@Entity
@Immutable
@Table(name = "pg_stat_activity")
public class PgStatActivity {
    @Id
    @Column(name = "pid")
    private int pid;

    @Column(name = "duration")
    private String duration;

    @Column(name = "query")
    private String query;

    @Column(name = "application")
    private String application;

    @Column(name = "state")
    private String state;

    @Override
    public String toString() {
        return "PgStatActivity [pid=" + pid + ",duration=" + duration + ",query=" + query + ",application=" + application + ",state=" + state + "]";
    }
}

@Repository
public interface PgStatActivityRepository extends JpaRepository<PgStatActivity,Integer> {
    @Query(nativeQuery = true,value = "SELECT pid,Now() - query_start AS duration,"
        + "application_name AS application,state FROM pg_stat_activity WHERE state = 'active'")
    List<PgStatActivity> findAllActiveQueries();

}

有人可以看到我在这里想念的东西吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)