0

我正在尝试解析 PostgreSQL 数据库中用户(在一段时间内)执行的所有查询(通过查询 pg_stat_statements 表)并尝试创建用户使用哪些表来运行SelectInsert或删除查询。基本上运行类似Select query, queryid, userid from pg_stat_state然后解析每个查询以检查它是Select还是InsertDelete查询,并从查询中提取 table_Name 。

我正在使用 sqlparse python 模块,但对它很新,所以需要帮助。我可以使用以下方法获取表名:

import sqlparse
from sqlparse.sql import Where, Comparison, Parenthesis, Identifier

for tokens in sqlparse.parse(sql_statement)[0]:
    if isinstance(tokens, Identifier):
        print(str(tokens))

但不确定如何获取语句类型(选择/插入/删除)以及表名。此外,还需要将 COPY 语句合并为 Selects。

我尝试使用psqlparse,但我没有在网上看到太多关于这个模块的信息/帮助。

请建议。

谢谢。

4

1 回答 1

0

这不是微不足道的,我不认为 sqlparse 真的很有帮助。INSERT 和 DELETE 非常简单,因为它们通常从“INSERT INTO table”和“DELETE FROM table”开始,但“SELECT”是狂野的西部。显然这些表将在 FROM 子句中提及,但它可以是“FROM table1 t1, table t2, table t3 WHERE”或“FROM table t1 LEFT INNER JOIN table t2 LEFT INNER JOIN table t3 WHERE”。您可能有嵌套查询,而 SELECT 甚至不必有一个表。另外,可能会有 UNION 提到更多的表。当然,“SELECT INTO”只是“INSERT”的另一种方式。我相信你应该从做文本处理开始,寻找关键词。你可能已经够远了。

于 2021-03-05T05:08:00.667 回答