import psycopg2 conn = psycopg2.connect('postgresql://admin:DC1qaz2wsx@10.1.0.20:5433/hr_portal') cur = conn.cursor() print('=' * 80) print('租戶內序號測試結果') print('=' * 80) # 查看員工序號 print('\n【員工序號分佈】') cur.execute(''' SELECT tenant_id, seq_no, employee_id, legal_name FROM tenant_employees ORDER BY tenant_id, seq_no LIMIT 20 ''') current_tenant = None for row in cur.fetchall(): if row[0] != current_tenant: current_tenant = row[0] print(f'\n租戶 {row[0]}:') print(f' seq_no={row[1]:3d} | employee_id={row[2]:8s} | {row[3]}') # 統計 print('\n' + '=' * 80) print('【租戶序號統計】') print('=' * 80) cur.execute(''' SELECT tenant_id, COUNT(*) as total, MIN(seq_no) as min_seq, MAX(seq_no) as max_seq FROM tenant_employees GROUP BY tenant_id ORDER BY tenant_id ''') print('\n租戶ID | 員工數 | 最小序號 | 最大序號') print('-' * 50) for row in cur.fetchall(): print(f'{row[0]:7d} | {row[1]:6d} | {row[2]:8d} | {row[3]:8d}') # 查看觸發器 print('\n' + '=' * 80) print('【資料庫觸發器】') print('=' * 80) cur.execute(''' SELECT trigger_name, event_object_table FROM information_schema.triggers WHERE trigger_schema = 'public' AND trigger_name LIKE '%seq_no%' ORDER BY event_object_table ''') print('\n觸發器名稱 目標表') print('-' * 60) for row in cur.fetchall(): print(f'{row[0]:40s} {row[1]}') conn.close()