From fc2b4bfd8f281ea43e23f9d743cdf54878d6ceaf Mon Sep 17 00:00:00 2001 From: adela Date: Tue, 3 Feb 2026 16:27:45 +0100 Subject: [PATCH 1/6] update text-to-sql blog to 2026 --- content/blog/top-text-to-sql-query-tools.md | 54 ++++++++++++------ .../top-text-to-sql-query-tools/banner.webp | Bin 23326 -> 0 bytes .../top-text-to-sql-query-tools/cover.webp | Bin 0 -> 23296 bytes 3 files changed, 38 insertions(+), 16 deletions(-) delete mode 100644 public/content/blog/top-text-to-sql-query-tools/banner.webp create mode 100644 public/content/blog/top-text-to-sql-query-tools/cover.webp diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index 4dcfdbae2..c5cef5714 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -1,10 +1,10 @@ --- -title: Top 5 Text-to-SQL Query Tools in 2025 +title: Top 5 Text-to-SQL Query Tools in 2026 author: Ayra -updated_at: 2025/12/04 12:00:00 -feature_image: /content/blog/top-text-to-sql-query-tools/banner.webp +updated_at: 2026/02/03 12:00:00 +feature_image: /content/blog/top-text-to-sql-query-tools/cover.webp tags: Industry -description: 'An overview to the most popular text-to-SQL AI tools in 2025, including DataGrip, TablePlus, SQL Chat, Vanna.ai, SQLAI.ai, Postgres.new, and DBHub MCP server. Compare features and capabilities to find the best SQL AI assistant for your workflow.' +description: 'An overview to the most popular text-to-SQL AI tools in 2026, including DataGrip, TablePlus, SQL Chat, Vanna.ai, SQLAI.ai, Postgres.new, and DBHub MCP server. Compare features and capabilities to find the best SQL AI assistant for your workflow.' --- @@ -18,6 +18,7 @@ This post is maintained by Bytebase, an open-source database DevSecOps tool. We | 2024/09/11 | Initial version. | | 2025/05/27 | 2025 Update. | | 2025/12/04 | Add TablePlus and DBHub. Remove Outerbase (acquired by Cloudflare). | +| 2026/02/03 | 2026 Update. Update DataGrip and Vanna.ai with major new features. | This is a series articles about SQL Clients / SQL Editors: @@ -28,7 +29,7 @@ This is a series articles about SQL Clients / SQL Editors: If you work with databases, SQL AI tools can significantly improve your productivity and efficiency. They help generate SQL commands automatically from natural language input and optimize query performance as functional and starter-friendly tool. -Here we gathered some of the most popular SQL AI tools (Text2SQL) on the market in 2024. +Here we gathered some of the most popular SQL AI tools (Text2SQL) on the market in 2026. ## DataGrip @@ -36,15 +37,23 @@ JetBrains introduces an AI Assistant to its flagship SQL client [DataGrip](https ![](/content/blog/top-text-to-sql-query-tools/datagrip.webp) -The DataGrip AI assistants can: +The DataGrip AI Assistant can: -1. Request queries and information using a natural language. -1. Explain complex SQL such as stored procedure. +1. Request queries and information using natural language. +1. Explain complex SQL such as stored procedures. 1. Optimize schema and SQL. 1. Compare DDL of two database objects. 1. Fix SQL mistakes. 1. Format and rewrite SQL. +In 2025, JetBrains significantly enhanced the AI Assistant: + +- **Schema and object context**: Attach specific database objects (tables, views) to AI chat for more precise responses, not just the whole schema. +- **Execution plan analysis**: AI can explain query execution plans and suggest optimizations for better performance. +- **Cloud-based code completion**: Leverages cloud resources for more precise autocomplete, including single lines, code blocks, and entire scripts. +- **Cloud database integration**: Connect directly to AWS, Azure, and Google Cloud accounts to browse and connect to databases. +- **Free tier and local models**: A free tier offers unlimited local completions, and you can connect OpenAI-compatible local endpoints (Ollama, LM Studio) for offline use. + ## TablePlus [TablePlus](https://tableplus.com/) is considered by many as the best SQL client on Mac. It's a modern, native database management tool that supports multiple databases. It has integrated text-to-SQL AI capabilities to help developers generate queries from natural language. @@ -72,14 +81,17 @@ SQL Chat supports the following databases and will add more over time: ![](/content/blog/top-text-to-sql-query-tools/vanna.webp) -[Vanna.ai](https://vanna.ai/) is a personalized AI SQL agent that transforms natural language questions into actionable database insights. The platform offers multiple deployment options to suit different organizational needs: +[Vanna.ai](https://vanna.ai/) is a personalized AI SQL agent that transforms natural language questions into actionable database insights. In late 2025, Vanna released **Vanna 2.0**, a complete architectural rewrite that evolved from a simple SQL generation library into a production-ready, user-aware agent framework. -- **Vanna Cloud**: Enterprise-ready platform with zero setup, trained on your specific data environment and industry context -- **Vanna Enterprise**: On-premises deployment within your own infrastructure for complete data sovereignty -- **Vanna API**: Integration capabilities for embedding AI-powered database interactions into existing applications -- **Open-Source Foundation**: Maximum flexibility for developers who want to build custom solutions +Key features of Vanna 2.0: -The platform supports major databases including Snowflake, BigQuery, Postgres and MySQL, with easy connector creation for others. Vanna can be deployed through various frontends—from Jupyter notebooks to Slack bots, web apps, and Streamlit interfaces. +- **Agent-based architecture**: New Agent-based API replacing the legacy VannaBase class methods, with better support for agentic models like Claude 4.5 and GPT-5. +- **User-aware components**: Identity flows through every layer with user context automatically available in tools, SQL queries, and audit logs. +- **Enterprise security**: Row-level security with queries filtered based on user permissions, group-based access control, and comprehensive audit logging for compliance. +- **Web-first approach**: Built-in `` component and server with streaming and rich UI components. +- **NVIDIA NIM integration**: Accelerated inference using NVIDIA NIM microservices for improved performance. + +The platform supports major databases including PostgreSQL, MySQL, Snowflake, BigQuery, Redshift, SQLite, Oracle, SQL Server, DuckDB, ClickHouse, and more. For LLMs, it supports OpenAI, Anthropic Claude, Google Gemini, Azure OpenAI, Ollama, and others. ## SQLAI.ai @@ -112,7 +124,13 @@ Unlike standalone SQL clients, [DBHub](https://dbhub.ai) brings text-to-SQL capa DBHub is a universal database MCP (Model Context Protocol) server that enables any MCP client such as Claude, Cursor, VS Code, and Codex to have text-to-SQL capability. It acts as a bridge between AI assistants and databases, allowing developers to use natural language to query and explore their databases directly from their development tools. -DBHub supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Compare with other database MCP server, it comes with an admin console to view configured data sources and trace SQL requests. +Since its release in March 2025, DBHub has grown to over 100K downloads and 1.7K GitHub stars. It supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Key features include: + +- **Custom tools**: Define reusable, parameterized SQL operations in configuration files. +- **Built-in web interface**: Visual way to execute queries, run custom tools, and view request traces without requiring an MCP client. +- **Security-first design**: Read-only mode and safety controls to prevent accidental data modifications. + +Compared with other database MCP servers, DBHub comes with an admin console to view configured data sources and trace SQL requests. ![](/content/blog/top-text-to-sql-query-tools/dbhub-console.webp) @@ -120,4 +138,8 @@ DBHub supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Serv Cloud hyperscalers are increasingly integrating Text-to-SQL capabilities across their database offerings. Google Cloud, for example, has rolled out this feature to BigQuery, Cloud SQL, and AlloyDB, and recently published [guidance](https://cloud.google.com/blog/products/databases/techniques-for-improving-text-to-sql) on effective AI prompting techniques for SQL generation. Meanwhile, the research community has developed evaluation frameworks like [BIRD-Bench](https://bird-bench.github.io/) to measure Text-to-SQL accuracy. -Text-to-SQL tools improve efficiency, make it easier to interact with databases. Although they also use state-of-the-art LLM models, the results may sometimes be inaccurate. If you want to use them in production, make sure to double-check before you hit **RUN**. +## Security Considerations + +When Anthropic launched MCP in November 2024, Postgres was among the original reference implementations. However, a vulnerability discovered by Datadog in 2025 exploited the original implementation—the server wrapped queries in read-only transactions but accepted semicolon-delimited statements, allowing attackers to bypass the read-only protection. Anthropic has since archived the vulnerable repository. When evaluating MCP-based database tools, prioritize implementations with robust security controls like proper query parsing and read-only enforcement. + +Text-to-SQL tools improve efficiency and make it easier to interact with databases. Although they use state-of-the-art LLM models, the results may sometimes be inaccurate. If you want to use them in production, make sure to double-check before you hit **RUN**. diff --git a/public/content/blog/top-text-to-sql-query-tools/banner.webp b/public/content/blog/top-text-to-sql-query-tools/banner.webp deleted file mode 100644 index 57cda25d3ae4cc4cc49d4977f20e5f80cacd17f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23326 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

J#w$_CM?dI)YZz1Q&pBiB;jNop? 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%0DwxBR*MjKCwGW1NsmlU!RYN5rZGM7 zge7u3oNsdBu%%J7J+JwY&aYhq{!Huh^c?o(aQnhBIsDs8aX@<0u$Jv8digy60d_^)99wDs)LC1}9+ib@`APBEG5D7D*DTGJPa z&=}^QxfjM!6P83&U1xZ^f(14|s`wG0)Pp<^4CkOEBp&_W9$#y3aEVLFTyEpaDe+O1 zND%zUTOSGuGKtF4_Fi<%XNNV^sq@OP>|Ea9*$|v-R{Nmcc*4!h1nAXZty` zWB#fRhdFWd&qrt6nsQUc2VeC%=_$H=UhwzZ+9>b<&-2)mJN68Z6xY*R?M`-rS_N>L zV`7Q^^&fkuF6Suv%h4(=$-XqMPob7W-XoXG!=7F|z5OPmMGL4p#0Qlf*AJvN!e;ur zo{t_ZEU=1em#HM1bV8%43)i^p!B8bA(T3ej}H zv2w%R2@?CR8)Cz@#bY&9H=>!VwNT*0%E*l=d&{KOnqX92y5QZ%{|tTcDsE$+i3xEl zFFp<2WrfvjsPTj$qdN0t)1;cn!!?z%3lfhVrxJmrv}E5!bwDaNK|`0wGqrpe5RLEA zDt}-*hX>UT?$IDjZQ{g2K4~T3)}vAxnE4<((OLO87Q*W$GtTTen3XPmMK;}e=ru>%p^ z5=ippVE>2_D`uq-i;@_i3Uczao%r?!5J#om`kbd=jA}bx$QoTSQ@&00+GR|wFpc2A zOCtyr{%6RH=X4d#ve{15=EPg0f~ATR?p+)!sku4(KDO>lztLDAXeml7&e zLFS=WLtGl3r|wwR&kY?=Z z0o*UM@xqnb0Je7k01c27K+u3Y%;ifgOx`}j$bF=l*hz^5000000000nNebA2GPba6 zRc_DUQ5U?-*xdpnU;qFB3{0kzvCl44F>p?Q3P-KMO~!e9o+Y0KlhCB0UJgdEGJd}a zn{RhY(w0>$?H9lR001-{+*vr_I;H14ep&4Y1k(0001%6t<~+9qTRuKmY&$2_sAB literal 0 HcmV?d00001 From b9eca9c227a5f6ac6d6abf105501993d1e2143be Mon Sep 17 00:00:00 2001 From: Tianzhou Date: Thu, 5 Feb 2026 00:07:29 -0800 Subject: [PATCH 2/6] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/blog/top-text-to-sql-query-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index c5cef5714..706c45d3f 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -4,7 +4,7 @@ author: Ayra updated_at: 2026/02/03 12:00:00 feature_image: /content/blog/top-text-to-sql-query-tools/cover.webp tags: Industry -description: 'An overview to the most popular text-to-SQL AI tools in 2026, including DataGrip, TablePlus, SQL Chat, Vanna.ai, SQLAI.ai, Postgres.new, and DBHub MCP server. Compare features and capabilities to find the best SQL AI assistant for your workflow.' +description: 'An overview of the most popular text-to-SQL AI tools in 2026, including DataGrip, TablePlus, SQL Chat, Vanna.ai, SQLAI.ai, Postgres.new, and DBHub MCP server. Compare features and capabilities to find the best SQL AI assistant for your workflow.' --- From b295b8e3fd72f7c88f7a61c5b2a548e4c23ab0af Mon Sep 17 00:00:00 2001 From: Tianzhou Date: Thu, 5 Feb 2026 00:07:41 -0800 Subject: [PATCH 3/6] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/blog/top-text-to-sql-query-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index 706c45d3f..5518c1552 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -46,7 +46,7 @@ The DataGrip AI Assistant can: 1. Fix SQL mistakes. 1. Format and rewrite SQL. -In 2025, JetBrains significantly enhanced the AI Assistant: +During 2025, JetBrains significantly enhanced the AI Assistant: - **Schema and object context**: Attach specific database objects (tables, views) to AI chat for more precise responses, not just the whole schema. - **Execution plan analysis**: AI can explain query execution plans and suggest optimizations for better performance. From 7fb67daf144bbf36038e756ce4e4526af85fbc2f Mon Sep 17 00:00:00 2001 From: Tianzhou Date: Thu, 5 Feb 2026 00:08:33 -0800 Subject: [PATCH 4/6] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/blog/top-text-to-sql-query-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index 5518c1552..14b7044fb 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -140,6 +140,6 @@ Cloud hyperscalers are increasingly integrating Text-to-SQL capabilities across ## Security Considerations -When Anthropic launched MCP in November 2024, Postgres was among the original reference implementations. However, a vulnerability discovered by Datadog in 2025 exploited the original implementation—the server wrapped queries in read-only transactions but accepted semicolon-delimited statements, allowing attackers to bypass the read-only protection. Anthropic has since archived the vulnerable repository. When evaluating MCP-based database tools, prioritize implementations with robust security controls like proper query parsing and read-only enforcement. +When Anthropic introduced MCP, the Postgres server was one of the original reference implementations. Security reviews of early MCP-based database servers have shown that simply wrapping user-supplied SQL in a read-only transaction is not sufficient if the server also accepts semicolon-delimited statements, because additional statements may execute outside the intended protection. When evaluating MCP-based database tools, prioritize implementations with robust security controls such as proper SQL parsing or allow-listing, strict read-only enforcement, and clear configuration for which databases and schemas can be accessed. Text-to-SQL tools improve efficiency and make it easier to interact with databases. Although they use state-of-the-art LLM models, the results may sometimes be inaccurate. If you want to use them in production, make sure to double-check before you hit **RUN**. From f58c8ea1931565105468e7335e07666123e5e33c Mon Sep 17 00:00:00 2001 From: Tianzhou Date: Thu, 5 Feb 2026 00:09:01 -0800 Subject: [PATCH 5/6] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/blog/top-text-to-sql-query-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index 14b7044fb..41e7eb00f 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -124,7 +124,7 @@ Unlike standalone SQL clients, [DBHub](https://dbhub.ai) brings text-to-SQL capa DBHub is a universal database MCP (Model Context Protocol) server that enables any MCP client such as Claude, Cursor, VS Code, and Codex to have text-to-SQL capability. It acts as a bridge between AI assistants and databases, allowing developers to use natural language to query and explore their databases directly from their development tools. -Since its release in March 2025, DBHub has grown to over 100K downloads and 1.7K GitHub stars. It supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Key features include: +As of early 2026, DBHub has over 100K downloads and 1.7K GitHub stars. It supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Key features include: - **Custom tools**: Define reusable, parameterized SQL operations in configuration files. - **Built-in web interface**: Visual way to execute queries, run custom tools, and view request traces without requiring an MCP client. From 6d9a56fe877072d9a9e34ea250f860d11a8c5b3e Mon Sep 17 00:00:00 2001 From: Tianzhou Date: Thu, 5 Feb 2026 00:09:27 -0800 Subject: [PATCH 6/6] Apply suggestion from @tianzhou --- content/blog/top-text-to-sql-query-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/top-text-to-sql-query-tools.md b/content/blog/top-text-to-sql-query-tools.md index 41e7eb00f..1de51e0e7 100644 --- a/content/blog/top-text-to-sql-query-tools.md +++ b/content/blog/top-text-to-sql-query-tools.md @@ -124,7 +124,7 @@ Unlike standalone SQL clients, [DBHub](https://dbhub.ai) brings text-to-SQL capa DBHub is a universal database MCP (Model Context Protocol) server that enables any MCP client such as Claude, Cursor, VS Code, and Codex to have text-to-SQL capability. It acts as a bridge between AI assistants and databases, allowing developers to use natural language to query and explore their databases directly from their development tools. -As of early 2026, DBHub has over 100K downloads and 1.7K GitHub stars. It supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Key features include: +As of early 2026, DBHub has over 100K downloads and 2K GitHub stars. It supports multiple databases including PostgreSQL, MySQL, MariaDB, SQL Server, and SQLite. Key features include: - **Custom tools**: Define reusable, parameterized SQL operations in configuration files. - **Built-in web interface**: Visual way to execute queries, run custom tools, and view request traces without requiring an MCP client.