PG-150: Logging CMD Type like SELECT, UPDATE, INSERT, DELETE.
parent
379fcdefd5
commit
47ad105011
|
@ -341,23 +341,20 @@ SELECT relations::oid[]::regclass[], query FROM pg_stat_monitor;
|
|||
**`cmd_type`**: List the command type of the query.
|
||||
|
||||
```sql
|
||||
SELECT substr(query,0, 50) AS query, cmd_type FROM pg_stat_monitor WHERE elevel = 0;
|
||||
query | cmd_type
|
||||
---------------------------------------------------+-----------------
|
||||
BEGIN | {INSERT}
|
||||
vacuum pgbench_branches | {}
|
||||
UPDATE pgbench_branches SET bbalance = bbalance + | {UPDATE,SELECT}
|
||||
select substr(query,$1, $2) as query, cmd_type fr | {SELECT}
|
||||
select count(*) from pgbench_branches | {SELECT}
|
||||
select substr(query,$1, $2) as query, cmd_type fr | {}
|
||||
UPDATE pgbench_accounts SET abalance = abalance + | {UPDATE,SELECT}
|
||||
update test SET a = $1 | {UPDATE}
|
||||
END | {INSERT}
|
||||
INSERT INTO pgbench_history (tid, bid, aid, delta | {INSERT}
|
||||
vacuum pgbench_tellers | {}
|
||||
SELECT a from test for update | {UPDATE,SELECT}
|
||||
SELECT abalance FROM pgbench_accounts WHERE aid = | {SELECT}
|
||||
UPDATE pgbench_tellers SET tbalance = tbalance + | {UPDATE,SELECT}
|
||||
truncate pgbench_history | {}
|
||||
(15 rows)
|
||||
postgres=# SELECT bucket, substr(query,0, 50) AS query, cmd_type FROM pg_stat_monitor WHERE elevel = 0;
|
||||
bucket | query | cmd_type
|
||||
--------+---------------------------------------------------+----------
|
||||
1 | vacuum analyze pgbench_history |
|
||||
1 | alter table pgbench_tellers add primary key (tid) |
|
||||
1 | insert into pgbench_tellers(tid,bid,tbalance) val | INSERT
|
||||
1 | select * from tt for update | UPDATE
|
||||
1 | update tt set a = $1 | UPDATE
|
||||
1 | delete from tt | DELETE
|
||||
1 | insert into pgbench_branches(bid,bbalance) values | INSERT
|
||||
1 | begin |
|
||||
1 | drop table if exists pgbench_accounts, pgbench_br |
|
||||
1 | copy pgbench_accounts from stdin | INSERT
|
||||
1 | create table pgbench_history(tid int,bid int,aid |
|
||||
1 | SELECT bucket, substr(query,$1, $2) AS query, cmd | SELECT
|
||||
(12 rows)
|
||||
```
|
||||
|
|
|
@ -176,14 +176,12 @@ hash_query_entry_dealloc(int bucket)
|
|||
HASH_SEQ_STATUS hash_seq;
|
||||
pgssQueryEntry *entry;
|
||||
|
||||
printf ("--%d--", hash_get_num_entries(pgss_hash));
|
||||
hash_seq_init(&hash_seq, pgss_query_hash);
|
||||
while ((entry = hash_seq_search(&hash_seq)) != NULL)
|
||||
{
|
||||
if (entry->key.bucket_id == bucket)
|
||||
entry = hash_search(pgss_query_hash, &entry->key, HASH_REMOVE, NULL);
|
||||
}
|
||||
printf ("--%d", hash_get_num_entries(pgss_hash));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -99,8 +99,12 @@ CREATE VIEW pg_stat_monitor AS SELECT
|
|||
queryid,
|
||||
query,
|
||||
application_name,
|
||||
(string_to_array(relations, ',')) relations,
|
||||
(string_to_array(cmd_type, ',')) cmd_type,
|
||||
(string_to_array(relations, ',')) AS relations,
|
||||
CASE
|
||||
WHEN query like 'BEGIN' THEN ''
|
||||
WHEN query like 'END' THEN ''
|
||||
ELSE (string_to_array(cmd_type, ','))[1]
|
||||
END AS cmd_type,
|
||||
elevel,
|
||||
sqlcode,
|
||||
message,
|
||||
|
|
|
@ -465,14 +465,14 @@ pgss_ExecutorCheckPerms(List *rt, bool abort)
|
|||
pgss->relations[i++] = rte->relid;
|
||||
}
|
||||
if (rte->requiredPerms & ACL_INSERT) snprintf(pgss->cmdTag[0],CMD_LEN,"%s", "INSERT");
|
||||
if (rte->requiredPerms & ACL_UPDATE) snprintf(pgss->cmdTag[1],CMD_LEN,"%s", "UPDATE");
|
||||
if (rte->requiredPerms & ACL_DELETE) snprintf(pgss->cmdTag[2],CMD_LEN,"%s", "DELETE");
|
||||
if (rte->requiredPerms & ACL_SELECT) snprintf(pgss->cmdTag[3],CMD_LEN,"%s", "SELECT");
|
||||
if (rte->requiredPerms & ACL_TRUNCATE) snprintf(pgss->cmdTag[4],CMD_LEN,"%s", "TRUNCATE");
|
||||
if (rte->requiredPerms & ACL_REFERENCES) snprintf(pgss->cmdTag[5],CMD_LEN,"%s", "REFERENCES");
|
||||
if (rte->requiredPerms & ACL_TRIGGER) snprintf(pgss->cmdTag[6],CMD_LEN,"%s", "TRIGGER");
|
||||
if (rte->requiredPerms & ACL_EXECUTE) snprintf(pgss->cmdTag[7],CMD_LEN,"%s", "EXECUTE");
|
||||
if (rte->requiredPerms & ACL_CREATE) snprintf(pgss->cmdTag[8],CMD_LEN,"%s", "CREATE");
|
||||
else if (rte->requiredPerms & ACL_UPDATE) snprintf(pgss->cmdTag[1],CMD_LEN,"%s", "UPDATE");
|
||||
else if (rte->requiredPerms & ACL_DELETE) snprintf(pgss->cmdTag[2],CMD_LEN,"%s", "DELETE");
|
||||
else if (rte->requiredPerms & ACL_SELECT) snprintf(pgss->cmdTag[3],CMD_LEN,"%s", "SELECT");
|
||||
else if (rte->requiredPerms & ACL_TRUNCATE) snprintf(pgss->cmdTag[4],CMD_LEN,"%s", "TRUNCATE");
|
||||
else if (rte->requiredPerms & ACL_REFERENCES) snprintf(pgss->cmdTag[5],CMD_LEN,"%s", "REFERENCES");
|
||||
else if (rte->requiredPerms & ACL_TRIGGER) snprintf(pgss->cmdTag[6],CMD_LEN,"%s", "TRIGGER");
|
||||
else if (rte->requiredPerms & ACL_EXECUTE) snprintf(pgss->cmdTag[7],CMD_LEN,"%s", "EXECUTE");
|
||||
else if (rte->requiredPerms & ACL_CREATE) snprintf(pgss->cmdTag[8],CMD_LEN,"%s", "CREATE");
|
||||
}
|
||||
LWLockRelease(pgss->lock);
|
||||
|
||||
|
@ -1255,7 +1255,6 @@ get_next_wbucket(pgssSharedState *pgss)
|
|||
hash_query_entry_dealloc(bucket_id);
|
||||
sprintf(file_name, "%s.%d", PGSM_TEXT_FILE, (int)bucket_id);
|
||||
unlink(file_name);
|
||||
printf("\nRemove file %s\n", file_name);
|
||||
|
||||
/* reset the query buffer */
|
||||
memset(buf, 0, sizeof (uint64));
|
||||
|
@ -2530,7 +2529,6 @@ dump_queries_buffer(int bucket_id, unsigned char *buf, int buf_len)
|
|||
char file_name[1024];
|
||||
|
||||
sprintf(file_name, "%s.%d", PGSM_TEXT_FILE, bucket_id);
|
||||
printf("\nWriting to %s\n", file_name);
|
||||
fd = OpenTransientFile(file_name, O_RDWR | O_CREAT | O_APPEND | PG_BINARY);
|
||||
if (fd < 0)
|
||||
ereport(LOG,
|
||||
|
|
Loading…
Reference in New Issue