问题描述
我正在编写一个用于生成数据库统计信息的应用程序。这需要访问名为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 (将#修改为@)