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