如何将唯一标识符与Python应用程序的PostgreSQL连接相关联?

如何将唯一标识符与Python应用程序的PostgreSQL连接相关联?,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,假设我有从多个Python实例到同一个Postgres DB的连接 从Postgres服务器,我希望能够识别哪个连接来自哪个实例。我希望能够从pg_stat_活动中运行select*,其中datname='db_name',并能够区分连接 我使用psycopg2作为Python实例的数据库驱动程序。有没有一种方法可以将字符串值或UID与连接字符串相关联,或者在连接实例化过程中以另一种方式关联,然后在上述查询返回的一列中查看此值?我看到其中包括客户端ip地址,这应该足以满足您的需要:您的副本都有唯

假设我有从多个Python实例到同一个Postgres DB的连接

从Postgres服务器,我希望能够识别哪个连接来自哪个实例。我希望能够从pg_stat_活动中运行
select*,其中datname='db_name'
,并能够区分连接

我使用psycopg2作为Python实例的数据库驱动程序。有没有一种方法可以将字符串值或UID与连接字符串相关联,或者在连接实例化过程中以另一种方式关联,然后在上述查询返回的一列中查看此值?

我看到其中包括客户端ip地址,这应该足以满足您的需要:您的副本都有唯一的地址,您可以在应用程序中公开这些地址,或者使用
kubectl get pod-o wide
命令获取它们


看起来您还可以设置一个与Postgres连接关联的
应用程序名称
,该名称将显示在
pg\u stat\u activity
表中。我以前从未尝试过,但答案中有一些说明应该会有所帮助。

您可以使用由提供的应用程序名称(可选)参数



结果:


$python psychopg.py
(20529,“推特”,2586,10,“postgres”,“pgAdmin III-浏览器”,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无)
(20529,'twitters',25763,5223264,'twitwww',myap-1.0',无,无,-1,datetime.datetime(2020,10,17,14,3,10,946424,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120,name=None)),datetime.datetime(2020,10,17,14,3,10,948886,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120,name=None)),datetime.datetime(2020,10,17,14,3,10,949015,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120,name=None)),datetime.datetime(2020,10,17,14,3,10,949015,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120,name=None)),None,'119920335',“从pg_stat_活动中选择*,其中datname='twitters','client backend')

也许您可以为每个连接设置不同的Postgresql用户?这些实例都是在kubernetes中运行的副本,所以我不知道该怎么做,因为它们都使用相同的连接详细信息。您比我快了一分钟!(但我有codez…)
import psycopg2 as psp

stuff = {
  'dbname': 'twitters',
 # 'host': '127.0.0.1',
  'user': 'twitwww',
  'password': 'secret',
  'application_name': 'myap-1.0' }
  
  
conn = psp.connect(**stuff) # use kwargs
print(conn)
  
curs = conn.cursor()
print(curs)
  
curs.execute("select * from pg_stat_activity where datname = 'twitters' ")

for row in curs:
        print ''
        print (row)
        print ''
  
conn.close()
      
$ python psychopg.py
<connection object at 0x7f40e391a7c0; dsn: 'user=twitwww password=xxxxxxxxxxxx application_name=myap-1.0 dbname=twitters', closed: 0>
<cursor object at 0x7f40e38ff528; closed: 0>

(20529, 'twitters', 2586, 10, 'postgres', 'pgAdmin III - Browser', None, None, None, None, None, None, None, None, None, None, None, None, '<insufficient privilege>', None)


(20529, 'twitters', 25763, 5223264, 'twitwww', 'myap-1.0', None, None, -1, datetime.datetime(2020, 10, 17, 14, 3, 10, 946424, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)), datetime.datetime(2020, 10, 17, 14, 3, 10, 948886, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)), datetime.datetime(2020, 10, 17, 14, 3, 10, 949015, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)), datetime.datetime(2020, 10, 17, 14, 3, 10, 949015, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)), None, None, 'active', None, '119920335', "select * from pg_stat_activity where datname = 'twitters' ", 'client backend')