使用JPA查询Postgres复制状态

时间:2018-10-16 09:14:06

标签: java postgresql hibernate spring-boot jpa

我正在尝试使用查询查询基础数据库的复制状态:

em.createNativeQuery("SELECT application_name, backend_start, state, cast(write_lag as text) FROM pg_stat_replication;").getResultList();

不幸的是,除application_name外的所有列均返回null。即使我只跑

 em.createNativeQuery("SELECT backend_start FROM pg_stat_replication;").getResultList();

我得到一个空结果。如果我在postgres命令行客户端中运行相同的查询,则会得到有意义的结果:

dbname=# select backend_start from pg_stat_replication;
         backend_start         
-------------------------------
 2018-10-16 09:01:58.262578+02
(1 row)

我正在将Spring-boot 1.2.6与hibernate和PostgreSQL 10.5结合使用。

我该怎么做才能得到该查询的结果?

1 个答案:

答案 0 :(得分:0)

刚发布后,我意识到我在CLI和Java中使用了不同的用户。显然,用户需要是超级用户或具有pg_read_all_stats默认角色。像这样:

GRANT pg_read_all_stats TO user;