2010-07-02 55 views
3

我正在遷移到Postgresql,但我面臨一個問題。postgresql相當於SQL Server sysprocesses登錄名和程序名

我與SQL Server一起使用的「技巧」是始終使用單個用戶(通常爲sa)登錄,並在數據庫連接中寫入program_name以檢查應用程序中當前記錄的用戶數。每次我爲UserX進行數據庫連接時,我都將連接中的program_name設置爲「MyApp_UserX」。通過這樣的查詢,我可以統計有多少用戶連接到我的應用程序。我用它來進行許可證檢查,並且它在sql server中非常可靠。

select count(sp.loginame) as CNT 
from Master.dbo.sysprocesses sp 
join Master.dbo.sysdatabases sd on sp.dbid = sd.dbid 
where sd.name = MYDATABASE and sp.program_name like 'MyApp%' 

現在Postgresql不允許我在連接中指定像program_name這樣的字符串。你有什麼建議?

對於Delphi用戶:注意我正在使用unidac,從SDAC遷移。在SDAC中我有TMSConnection.ApplicationName,但是沒有Postgresql的等價物。

回答

3

您可以等待9.0或者對有問題的數據庫進行一些假設並計算(幾乎所有)連接。

+0

感謝您的寶貴信息,真正9.0包含完全相同的功能,這將是巨大的,有它。 – LaBracca 2010-07-02 15:06:52

1

如果您從不同的客戶端計算機登錄,則可以使用系統視圖pg_stat_activity中報告的IP地址。對於與服務器建立的每個連接,都會顯示客戶端的IP地址。如果不同的用戶使用不同的計算機,這可能適用於您(直到9.0不在),直到此時它可能是一種解決方法。

http://www.postgresql.org/docs/current/static/monitoring-stats.html

+0

感謝您的信息。這是一個上帝的建議,但在我的情況下,我不能申請,因爲沒有IP地址是不夠的,至少有兩個原因:一個可以使用pgadmin和「使用連接」,或2個用戶可以使用相同的電腦(在終端服務器)。 – LaBracca 2010-07-05 08:54:14