diff --git a/sql/engines/pgsql.py b/sql/engines/pgsql.py index 1554d0ed73..e7d491428a 100644 --- a/sql/engines/pgsql.py +++ b/sql/engines/pgsql.py @@ -164,12 +164,12 @@ def query_check(self, db_name=None, sql=""): except IndexError: result["bad_query"] = True result["msg"] = "没有有效的SQL语句" - if re.match(r"^select", sql, re.I) is None: + if re.match(r"^select|^explain", sql, re.I) is None: result["bad_query"] = True result["msg"] = "不支持的查询语法类型!" if "*" in sql: result["has_star"] = True - result["msg"] = "SQL语句中含有 * " + result["msg"] += "SQL语句中含有 * " return result def query( diff --git a/sql/engines/tests.py b/sql/engines/tests.py index 5556829833..05699ed5a6 100644 --- a/sql/engines/tests.py +++ b/sql/engines/tests.py @@ -610,6 +610,20 @@ def test_query_check_star_sql(self): }, ) + def test_query_check_explain(self): + sql = "explain select x from xx " + new_engine = PgSQLEngine(instance=self.ins) + check_result = new_engine.query_check(db_name="archery", sql=sql) + self.assertDictEqual( + check_result, + { + "msg": "", + "bad_query": False, + "filtered_sql": sql.strip(), + "has_star": False, + }, + ) + def test_filter_sql_with_delimiter(self): sql = "select * from xx;" new_engine = PgSQLEngine(instance=self.ins) diff --git a/sql/templates/sqlquery.html b/sql/templates/sqlquery.html index c87ad1e4ce..e6c3d39174 100644 --- a/sql/templates/sqlquery.html +++ b/sql/templates/sqlquery.html @@ -970,7 +970,7 @@ else if (sql === 'show create table') { sqlContent = "desc " + $("#table_name").val() + ";" } - } else if (optgroup === "MySQL") { + } else if (optgroup === "MySQL" || optgroup === "PgSQL" ) { //查看执行计划 if (sql === 'explain') { sqlContent = 'explain ' + sqlContent