2017-02-16 111 views
0

我有這個簡單的查詢的輸出的煩惱:和pg_stat_activity奇怪的輸出

select 
    pid, 
    state 
from pg_stat_activity 
where datname = 'My_DB_name' 

同時運行它不同的方式:

  1. 在IDE
  2. 在終端
  3. 通過運行PSQL在bash腳本中:

QUERY="copy (select pid, state from pg_stat_activity where datname = 'My_DB_name') to stdout with csv"

psql -h host -U user -d database -t -c "$QUERY" >> result 

1和2返回的結果,因爲我需要他們:

1:

pid  state       
------ ----------------------------- 
23126 idle       
25573 active       
2642 active       
20420 idle       
23391 idle       
5339 idle       
7710 idle       
1558 idle       
12506 idle       
2862 active       
716  active       
9834 idle in transaction (aborted) 

2:

pid |    state    
-------+------------------------------- 
23126 | idle 
25573 | idle 
    2642 | active 
20420 | idle 
23391 | idle 
    5339 | active 
    7710 | idle 
    1558 | idle 
12506 | idle 
    2211 | active 
    716 | active 
    9834 | idle in transaction (aborted) 

3是奇怪的 - 它沒有給我任何狀態除「有效」外的名稱

23126, 
25573, 
2642, 
20420, 
23391, 
5339, 
7710, 
1558, 
12506, 
1660,active 
716,active 
1927,active 
9834, 

我錯過了什麼?如何通過bash腳本獲取所有的狀態名稱?

+3

您是否在所有情況下都以相同的用戶進行連接? 'pg_stat_activity'會向超級用戶顯示不同於普通用戶的輸出。 – jmelesky

+0

是的,原因是作爲非超級用戶連接。謝謝。 – dreamca4er

+0

@jmelesky,你可以發表你的評論作爲答案?所以我可以選擇它是正確的 – dreamca4er

回答

0

pg_stat_activity是根據您是以超級用戶身份登錄還是以非特權用戶身份顯示不同內容的目錄視圖。

從您的輸出中,它看起來像在#1和#2中以超級用戶身份登錄,而在#3中以普通用戶身份登錄。