分析SQL查询的工具

时间:2018-10-11 17:46:24

标签: postgresql

是否构建了可以进行postgres查询并将其转换为JSON对象的工具。像这样:

INSERT INTO schema_a.table_a
SELECT * from schema_b.table_b

输出:

{
'type': 'query',
'method': 'INSERT INTO',
'output':
    {
    'type': 'table',
    'schema': 'schema_a'
    'table': 'table_a'
    },
'input':
    {
    'type': 'query',
    'method': 'SELECT',
    'inputs':
    [
        {
        'type': 'table'
        'schema': 'schema_b'
        'table': 'table_b'
        }
    ]
    }
}

不必完全是这样,但是这个主意可以让我们对输入,输出,方法进行分类,并且足够灵活以能够处理联接,子查询等。

1 个答案:

答案 0 :(得分:1)

可能不是您要找的东西,但是EXPLAIN确实支持JSON作为输出类型,这将使​​用PostgreSQL的查询解析器/计划器将查询分解成其组成部分(某些键/值省略了简洁):

CREATE TABLE test ( id SERIAL PRIMARY KEY, value TEXT NOT NULL );

EXPLAIN (FORMAT JSON) INSERT INTO test VALUES (1, 'Test');
[
  {
    "Plan": {
      "Node Type": "ModifyTable",
      "Operation": "Insert",
      "Relation Name": "test",
      "Alias": "test"
    }
  }
]

EXPLAIN (FORMAT JSON) SELECT * FROM test;
[
  {
    "Plan": {
      "Node Type": "Seq Scan",
      "Relation Name": "test",
      "Alias": "test"
    }
  }
]

这肯定可以告诉您查询中使用的每个关系(包括复杂的联接,视图等)。如果您使用ANALYZE,它将能够告诉您输出行的数量(而不是内容)。这将无法告诉您查询的输入。