Skip to content

Commit 3c8cd51

Browse files
authored
[-] fix jsonb null in "Top Tables" and "Health-check" dashboards (#833)
* [-] PG "Top Tables" fix NULL column handling Not all NULL metric values were handled correctly and Grafana can give: Status: 500. Message: db query error: pq: cannot cast jsonb null to type bigint * A few Health-checks panels were giving "cannot cast jsonb null" as well So replace all "data->$col" with "data->>$col"
1 parent 1569fdd commit 3c8cd51

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed

grafana/postgres/v11/health-check.json

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
"orderByTime": "ASC",
106106
"policy": "default",
107107
"rawQuery": true,
108-
"rawSql": "SELECT\n time,\n (data->'in_recovery_int')::int\nFROM\n wal\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
108+
"rawSql": "SELECT\n time,\n (data->>'in_recovery_int')::int\nFROM\n wal\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
109109
"refId": "A",
110110
"resultFormat": "time_series",
111111
"select": [
@@ -238,7 +238,7 @@
238238
"orderByTime": "ASC",
239239
"policy": "default",
240240
"rawQuery": true,
241-
"rawSql": "SELECT\n time,\n (data->'postmaster_uptime_s')::int\nFROM\n wal\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
241+
"rawSql": "SELECT\n time,\n (data->>'postmaster_uptime_s')::int\nFROM\n wal\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
242242
"refId": "A",
243243
"resultFormat": "time_series",
244244
"select": [
@@ -378,7 +378,7 @@
378378
"orderByTime": "ASC",
379379
"policy": "default",
380380
"rawQuery": true,
381-
"rawSql": "select time, (data->'server_version_num')::int8 as value from settings where dbname = '$dbname' and $__timeFilter(time) order by time desc limit 1;",
381+
"rawSql": "select time, (data->>'server_version_num')::int8 as value from settings where dbname = '$dbname' and $__timeFilter(time) order by time desc limit 1;",
382382
"refId": "A",
383383
"resultFormat": "time_series",
384384
"select": [
@@ -506,7 +506,7 @@
506506
"orderByTime": "ASC",
507507
"policy": "default",
508508
"rawQuery": true,
509-
"rawSql": "SELECT\n 0 AS time,\n max((data->'longest_query_seconds')::int)\nFROM\n backends\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\n",
509+
"rawSql": "SELECT\n 0 AS time,\n max((data->>'longest_query_seconds')::int)\nFROM\n backends\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\n",
510510
"refId": "A",
511511
"resultFormat": "time_series",
512512
"select": [
@@ -646,7 +646,7 @@
646646
"orderByTime": "ASC",
647647
"policy": "default",
648648
"rawQuery": true,
649-
"rawSql": "SELECT\n time,\n (data->'numbackends')::int\nFROM\n db_stats\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
649+
"rawSql": "SELECT\n time,\n (data->>'numbackends')::int\nFROM\n db_stats\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
650650
"refId": "A",
651651
"resultFormat": "time_series",
652652
"select": [
@@ -786,7 +786,7 @@
786786
"orderByTime": "ASC",
787787
"policy": "default",
788788
"rawQuery": true,
789-
"rawSql": "SELECT\n time,\n (data->'max_connections')::int\nFROM\n settings\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
789+
"rawSql": "SELECT\n time,\n (data->>'max_connections')::int\nFROM\n settings\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
790790
"refId": "A",
791791
"resultFormat": "time_series",
792792
"select": [
@@ -926,7 +926,7 @@
926926
"orderByTime": "ASC",
927927
"policy": "default",
928928
"rawQuery": true,
929-
"rawSql": "SELECT\n 0 as time,\n max((data->'waiting')::int)\nFROM\n backends\nWHERE\n $__timeFilter(time, $online_interval)\n AND dbname = '$dbname'",
929+
"rawSql": "SELECT\n 0 as time,\n max((data->>'waiting')::int)\nFROM\n backends\nWHERE\n $__timeFilter(time, $online_interval)\n AND dbname = '$dbname'",
930930
"refId": "A",
931931
"resultFormat": "time_series",
932932
"select": [
@@ -1608,7 +1608,7 @@
16081608
"orderByTime": "ASC",
16091609
"policy": "default",
16101610
"rawQuery": true,
1611-
"rawSql": "SELECT\n 0 as time,\n max((data->'idleintransaction')::int)\nFROM\n backends\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\n",
1611+
"rawSql": "SELECT\n 0 as time,\n max((data->>'idleintransaction')::int)\nFROM\n backends\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\n",
16121612
"refId": "A",
16131613
"resultFormat": "time_series",
16141614
"select": [
@@ -1748,7 +1748,7 @@
17481748
"orderByTime": "ASC",
17491749
"policy": "default",
17501750
"rawQuery": true,
1751-
"rawSql": "SELECT\n time,\n (data->'size_b')::int8\nFROM\n db_size\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
1751+
"rawSql": "SELECT\n time,\n (data->>'size_b')::int8\nFROM\n db_size\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1",
17521752
"refId": "A",
17531753
"resultFormat": "time_series",
17541754
"select": [
@@ -2016,7 +2016,7 @@
20162016
"orderByTime": "ASC",
20172017
"policy": "default",
20182018
"rawQuery": true,
2019-
"rawSql": "select\n time,\n (data->'free')::int8\nfrom\n psutil_disk\nwhere \n dbname = '$dbname' and $__timeFilter(time)\n and tag_data->>'dir_or_tablespace' = 'data_directory'\norder by 1 desc\nlimit 1",
2019+
"rawSql": "select\n time,\n (data->>'free')::int8\nfrom\n psutil_disk\nwhere \n dbname = '$dbname' and $__timeFilter(time)\n and tag_data->>'dir_or_tablespace' = 'data_directory'\norder by 1 desc\nlimit 1",
20202020
"refId": "A",
20212021
"resultFormat": "time_series",
20222022
"select": [
@@ -2564,7 +2564,7 @@
25642564
"orderByTime": "ASC",
25652565
"policy": "default",
25662566
"rawQuery": true,
2567-
"rawSql": "SELECT\n time,\n (data->'is_failing_int')::int\nFROM\n archiver\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
2567+
"rawSql": "SELECT\n time,\n (data->>'is_failing_int')::int\nFROM\n archiver\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
25682568
"refId": "A",
25692569
"resultFormat": "time_series",
25702570
"select": [
@@ -2714,7 +2714,7 @@
27142714
"orderByTime": "ASC",
27152715
"policy": "default",
27162716
"rawQuery": true,
2717-
"rawSql": "SELECT\n time,\n (data->'wal_size_b')::float8\nFROM\n wal_size\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
2717+
"rawSql": "SELECT\n time,\n (data->>'wal_size_b')::float8\nFROM\n wal_size\nWHERE\n time > now() - '$online_interval'::interval\n AND dbname = '$dbname'\nORDER BY time DESC\nLIMIT 1\n",
27182718
"refId": "A",
27192719
"resultFormat": "time_series",
27202720
"select": [
@@ -2848,7 +2848,7 @@
28482848
"orderByTime": "ASC",
28492849
"policy": "default",
28502850
"rawQuery": true,
2851-
"rawSql": "WITH q_duplicates AS (\nSELECT\n coalesce(sum(count-1), 0) as extra\nFROM (\nSELECT\n tag_data->>'table_full_name' as table_full_name,\n data->>'index_def' as index_def,\n count(*)\nFROM\n index_stats\nWHERE\n time = (select max(time) from index_stats where $__timeFilter(time) AND dbname = '$dbname')\n AND dbname = '$dbname'\nGROUP BY 1, 2\nHAVING count(*) > 1\n) x\n)\nSELECT\n 0 as time,\n sum((data->'is_invalid_int')::int) + (select extra from q_duplicates)\nFROM\n index_stats\nWHERE\n time = (select max(time) from index_stats where $__timeFilter(time) AND dbname = '$dbname')\n AND dbname = '$dbname'\nGROUP BY 1",
2851+
"rawSql": "WITH q_duplicates AS (\nSELECT\n coalesce(sum(count-1), 0) as extra\nFROM (\nSELECT\n tag_data->>'table_full_name' as table_full_name,\n data->>'index_def' as index_def,\n count(*)\nFROM\n index_stats\nWHERE\n time = (select max(time) from index_stats where $__timeFilter(time) AND dbname = '$dbname')\n AND dbname = '$dbname'\nGROUP BY 1, 2\nHAVING count(*) > 1\n) x\n)\nSELECT\n 0 as time,\n sum((data->>'is_invalid_int')::int) + (select extra from q_duplicates)\nFROM\n index_stats\nWHERE\n time = (select max(time) from index_stats where $__timeFilter(time) AND dbname = '$dbname')\n AND dbname = '$dbname'\nGROUP BY 1",
28522852
"refId": "A",
28532853
"resultFormat": "time_series",
28542854
"select": [
@@ -2970,7 +2970,7 @@
29702970
"orderByTime": "ASC",
29712971
"policy": "default",
29722972
"rawQuery": true,
2973-
"rawSql": "SELECT\n 0 as time,\n sum(count)\nFROM (\n\nSELECT * FROM (\n\nSELECT\n case when data->>'autovacuum' = 'off' then 1 else 0 end as count\nFROM\n settings\nWHERE\n dbname = '$dbname'\n AND time > now() - '1d'::interval\nORDER BY time DESC LIMIT 1\n\n) a\n\nUNION ALL\n\nSELECT * FROM (\n\nSELECT\n count(*)\nFROM\n table_stats\nWHERE\n dbname = '$dbname'\n AND time = (select max(time) from table_stats where dbname = '$dbname')\n AND (data->'no_autovacuum')::int = 1\n\n) b\n\n) x;",
2973+
"rawSql": "SELECT\n 0 as time,\n sum(count)\nFROM (\n\nSELECT * FROM (\n\nSELECT\n case when data->>'autovacuum' = 'off' then 1 else 0 end as count\nFROM\n settings\nWHERE\n dbname = '$dbname'\n AND time > now() - '1d'::interval\nORDER BY time DESC LIMIT 1\n\n) a\n\nUNION ALL\n\nSELECT * FROM (\n\nSELECT\n count(*)\nFROM\n table_stats\nWHERE\n dbname = '$dbname'\n AND time = (select max(time) from table_stats where dbname = '$dbname')\n AND (data->>'no_autovacuum')::int = 1\n\n) b\n\n) x;",
29742974
"refId": "A",
29752975
"resultFormat": "time_series",
29762976
"select": [
@@ -3104,7 +3104,7 @@
31043104
"orderByTime": "ASC",
31053105
"policy": "default",
31063106
"rawQuery": true,
3107-
"rawSql": "SELECT\n 0 as time,\n coalesce(sum(req - req_lag), 0)\nFROM (\nSELECT\n (data->'checkpoints_req')::int as req,\n lag((data->'checkpoints_req')::int) over(order by time) as req_lag\nFROM\n bgwriter\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n) x\nWHERE req > req_lag\n",
3107+
"rawSql": "SELECT\n 0 as time,\n coalesce(sum(req - req_lag), 0)\nFROM (\nSELECT\n (data->>'checkpoints_req')::int as req,\n lag((data->>'checkpoints_req')::int) over(order by time) as req_lag\nFROM\n bgwriter\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n) x\nWHERE req > req_lag\n",
31083108
"refId": "A",
31093109
"resultFormat": "time_series",
31103110
"select": [
@@ -3238,7 +3238,7 @@
32383238
"orderByTime": "ASC",
32393239
"policy": "default",
32403240
"rawQuery": true,
3241-
"rawSql": "SELECT\n time,\n (data->'approx_table_bloat_b')::int8\nFROM\n table_bloat_approx_summary_sql\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY 1 DESC\nLIMIT 1\n",
3241+
"rawSql": "SELECT\n time,\n (data->>'approx_table_bloat_b')::int8\nFROM\n table_bloat_approx_summary_sql\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\nORDER BY 1 DESC\nLIMIT 1\n",
32423242
"refId": "A",
32433243
"resultFormat": "time_series",
32443244
"select": [
@@ -3658,7 +3658,7 @@
36583658
"orderByTime": "ASC",
36593659
"policy": "default",
36603660
"rawQuery": true,
3661-
"rawSql": "SELECT\n 0 as time,\n max((data->'longest_autovacuum_seconds')::int8) as longest_autovacuum_seconds\nFROM\n backends\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'",
3661+
"rawSql": "SELECT\n 0 as time,\n max((data->>'longest_autovacuum_seconds')::int8) as longest_autovacuum_seconds\nFROM\n backends\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'",
36623662
"refId": "A",
36633663
"resultFormat": "time_series",
36643664
"select": [
@@ -3798,7 +3798,7 @@
37983798
"orderByTime": "ASC",
37993799
"policy": "default",
38003800
"rawQuery": true,
3801-
"rawSql": "SELECT\n time,\n sum((scan-scan_lag) * 60 / extract(epoch from (time-time_lag)))\nFROM (\n SELECT\n time, lag(time) over w as time_lag,\n (data->'seq_scan')::int8 as scan, lag((data->'seq_scan')::int8) over w as scan_lag\n FROM\n table_stats\n WHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND (data->'table_size_b')::int8 > 100000000\n WINDOW w AS (partition by tag_data->>'table_full_name' order by time)\n) x\nWHERE scan > scan_lag and time > time_lag\nGROUP BY 1\nORDER BY 1",
3801+
"rawSql": "SELECT\n time,\n sum((scan-scan_lag) * 60 / extract(epoch from (time-time_lag)))\nFROM (\n SELECT\n time, lag(time) over w as time_lag,\n (data->>'seq_scan')::int8 as scan, lag((data->>'seq_scan')::int8) over w as scan_lag\n FROM\n table_stats\n WHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND (data->>'table_size_b')::int8 > 100000000\n WINDOW w AS (partition by tag_data->>'table_full_name' order by time)\n) x\nWHERE scan > scan_lag and time > time_lag\nGROUP BY 1\nORDER BY 1",
38023802
"refId": "A",
38033803
"resultFormat": "time_series",
38043804
"select": [
@@ -4090,7 +4090,7 @@
40904090
"orderByTime": "ASC",
40914091
"policy": "default",
40924092
"rawQuery": true,
4093-
"rawSql": "select\n time,\n avg(((upd-upd_lag) * 60) / extract(epoch from time - time_lag))\nfrom (\n select \n (data->'tup_updated')::int8 as upd, lag((data->'tup_updated')::int8) over w as upd_lag,\n time, lag(time) over w as time_lag\n from db_stats\n where dbname = '$dbname' and $__timeFilter(time)\n window w as (order by time)\n) x\nwhere upd >= upd_lag and time > time_lag\ngroup by 1\norder by 1",
4093+
"rawSql": "select\n time,\n avg(((upd-upd_lag) * 60) / extract(epoch from time - time_lag))\nfrom (\n select \n (data->>'tup_updated')::int8 as upd, lag((data->>'tup_updated')::int8) over w as upd_lag,\n time, lag(time) over w as time_lag\n from db_stats\n where dbname = '$dbname' and $__timeFilter(time)\n window w as (order by time)\n) x\nwhere upd >= upd_lag and time > time_lag\ngroup by 1\norder by 1",
40944094
"refId": "A",
40954095
"resultFormat": "time_series",
40964096
"select": [
@@ -4236,7 +4236,7 @@
42364236
"orderByTime": "ASC",
42374237
"policy": "default",
42384238
"rawQuery": true,
4239-
"rawSql": "select\n time,\n avg(((del-del_lag) * 60) / extract(epoch from time - time_lag))\nfrom (\n select \n (data->'tup_deleted')::int8 as del, lag((data->'tup_deleted')::int8) over w as del_lag,\n time, lag(time) over w as time_lag\n from db_stats\n where dbname = '$dbname' and $__timeFilter(time)\n window w as (order by time)\n) x\nwhere del >= del_lag and time > time_lag\ngroup by 1\norder by 1",
4239+
"rawSql": "select\n time,\n avg(((del-del_lag) * 60) / extract(epoch from time - time_lag))\nfrom (\n select \n (data->>'tup_deleted')::int8 as del, lag((data->>'tup_deleted')::int8) over w as del_lag,\n time, lag(time) over w as time_lag\n from db_stats\n where dbname = '$dbname' and $__timeFilter(time)\n window w as (order by time)\n) x\nwhere del >= del_lag and time > time_lag\ngroup by 1\norder by 1",
42404240
"refId": "A",
42414241
"resultFormat": "time_series",
42424242
"select": [
@@ -4376,7 +4376,7 @@
43764376
"orderByTime": "ASC",
43774377
"policy": "default",
43784378
"rawQuery": true,
4379-
"rawSql": "SELECT\n 0 as time,\n max((data->'backup_duration_s')::int8)\nFROM\n db_stats\nWHERE\n $__timeFilter(time)\n and dbname = '$dbname'",
4379+
"rawSql": "SELECT\n 0 as time,\n max((data->>'backup_duration_s')::int8)\nFROM\n db_stats\nWHERE\n $__timeFilter(time)\n and dbname = '$dbname'",
43804380
"refId": "A",
43814381
"resultFormat": "time_series",
43824382
"select": [
@@ -4510,7 +4510,7 @@
45104510
"orderByTime": "ASC",
45114511
"policy": "default",
45124512
"rawQuery": true,
4513-
"rawSql": "SELECT\n 0 as time,\n max((data->'tx_freeze_age')::int8)\nFROM\n table_stats\nWHERE\n $__timeFilter(time)\n and dbname = '$dbname'",
4513+
"rawSql": "SELECT\n 0 as time,\n max((data->>'tx_freeze_age')::int8)\nFROM\n table_stats\nWHERE\n $__timeFilter(time)\n and dbname = '$dbname'",
45144514
"refId": "A",
45154515
"resultFormat": "time_series",
45164516
"select": [
@@ -4650,7 +4650,7 @@
46504650
"orderByTime": "ASC",
46514651
"policy": "default",
46524652
"rawQuery": true,
4653-
"rawSql": "select\n 0 as time,\n max(xmin) from (\nSELECT\n max((data->'xmin_age_tx')::int8) as xmin\nFROM\n replication_slots\nWHERE\n time = (select max(time) from replication_slots where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n and dbname = '$dbname' \nUNION ALL\nSELECT\n max((data->'max_xmin_age_tx')::int8) as xmin\nFROM\n backends\nWHERE\n time = (select max(time) from backends where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n and dbname = '$dbname'\n) x",
4653+
"rawSql": "select\n 0 as time,\n max(xmin) from (\nSELECT\n max((data->>'xmin_age_tx')::int8) as xmin\nFROM\n replication_slots\nWHERE\n time = (select max(time) from replication_slots where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n and dbname = '$dbname' \nUNION ALL\nSELECT\n max((data->>'max_xmin_age_tx')::int8) as xmin\nFROM\n backends\nWHERE\n time = (select max(time) from backends where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n and dbname = '$dbname'\n) x",
46544654
"refId": "A",
46554655
"resultFormat": "time_series",
46564656
"select": [
@@ -4790,7 +4790,7 @@
47904790
"orderByTime": "ASC",
47914791
"policy": "default",
47924792
"rawQuery": true,
4793-
"rawSql": "SELECT\n 0 as time,\n sum((data->'non_active_int')::int)\nFROM\n replication_slots\nWHERE\n time = (select max(time) from replication_slots where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n AND dbname = '$dbname'\n",
4793+
"rawSql": "SELECT\n 0 as time,\n sum((data->>'non_active_int')::int)\nFROM\n replication_slots\nWHERE\n time = (select max(time) from replication_slots where time > now() - '$online_interval'::interval AND dbname = '$dbname')\n AND dbname = '$dbname'\n",
47944794
"refId": "A",
47954795
"resultFormat": "time_series",
47964796
"select": [
@@ -4924,7 +4924,7 @@
49244924
"orderByTime": "ASC",
49254925
"policy": "default",
49264926
"rawQuery": true,
4927-
"rawSql": "SELECT\n 0 as time,\n max((data->'replay_lag_b')::int8)\nFROM\n replication\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n",
4927+
"rawSql": "SELECT\n 0 as time,\n max((data->>'replay_lag_b')::int8)\nFROM\n replication\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n",
49284928
"refId": "A",
49294929
"resultFormat": "time_series",
49304930
"select": [

0 commit comments

Comments
 (0)