Bug 579810
| Summary: | Collection of Postgres table metrics fails when the tables are not in the public schema | |||
|---|---|---|---|---|
| Product: | [Other] RHQ Project | Reporter: | lionel.duriez | |
| Component: | Plugins | Assignee: | Thomas Segismont <tsegismo> | |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Mike Foley <mfoley> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | medium | |||
| Version: | 1.3.1 | CC: | hrupp | |
| Target Milestone: | --- | |||
| Target Release: | RHQ 4.11 | |||
| Hardware: | All | |||
| OS: | Linux | |||
| Whiteboard: | ||||
| Fixed In Version: | Doc Type: | Bug Fix | ||
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1095369 (view as bug list) | Environment: | ||
| Last Closed: | 2014-07-21 10:13:41 UTC | Type: | --- | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1095369 | |||
Fixed in master
commit 835eca6a7b14bc92db5f98d336470f9b6ece145e
Author: Thomas Segismont <tsegismo>
Date: Tue Apr 8 11:15:14 2014 +0200
Changed resource key format ("tablename"->"schemaname.tablename")
Implemented resource upgrade and updated resource component and discovery component
Also changed the availability check: new the resource component checks for table existence instead of looking at the parent database availability
The fix for this bug is a prerequisite of the fix for Bug 1079403 Bulk closing of RHQ 4.11 issues, now that RHQ 4.12 is out. If you find an issue with those, please open a new BZ, linking to the old one. |
The table metrics cannot be collected when the tables do not belong to the public schema. The problem appears on the following environment : Monitored Database : Postgresql 8.3 RHQ agent plugin version : rhq-postgres-plugin-1.3.1 Jopr Server version : 2.3.1 To reproduce the problem, create a new schema in a monitored database : create schema myschema; Then create a table in the new schema : create table myschema.mytable (name varchar(20)); In Jopr, no metrics are available for the table mytable. The role used by the agent to connect to the Postgresql DB is postgres. The reason for the failure to collect the metrics can be found in the Postgresql logs : ERROR: relation "mytable" does not exist STATEMENT: SELECT ts.*, pg_relation_size(ts.relname) AS table_size, pg_total_relation_size(ts.relname) AS total_size, ios.heap_blks_read, ios.heap_blks_hit, ios.idx_blks_read, ios.idx_blks_hit, ios.toast_blks_read, ios.toast_blks_hit, ios.tidx_blks_read, ios.tidx_blks_hit FROM pg_stat_user_tables ts LEFT JOIN pg_statio_user_tables ios on ts.relid = ios.relid WHERE ts.relname = $1 This is due to the fact that by default the search_path of a postgresql role is : "$user",public By default, the newly created schema is not looked in when performing a query. To fix the problem, the select statement could me modified to look like this : SELECT ts.*, pg_relation_size(ts.schemaname || '.' || ts.relname) AS table_size, pg_total_relation_size(ts.schemaname || '.' || ts.relname) AS total_size, ios.heap_blks_read, ios.heap_blks_hit, ios.idx_blks_read, ios.idx_blks_hit, ios.toast_blks_read, ios.toast_blks_hit, ios.tidx_blks_read, ios.tidx_blks_hit FROM pg_stat_user_tables ts LEFT JOIN pg_statio_user_tables ios on ts.relid = ios.relid WHERE ts.relname = 'mytable' and ts.schemaname='myschema'; As a temporary workaround, one could alter the search_path for the role postgres : alter role postgres set search_path="$user",public,myschema;