2010-07-02 53 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