<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>NLQueries Blog</title>
    <link>https://nlqueries.com/blog/</link>
    <description>Notes from the NLQueries maintainers on natural language to SQL, the knowledge base, connectors and the MCP server.</description>
    <language>en</language>
    <atom:link href="https://nlqueries.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate>
    <item>
      <title>Text-to-SQL, explained: how a question becomes a query, and where it goes wrong</title>
      <link>https://nlqueries.com/blog/text-to-sql-explained</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/text-to-sql-explained</guid>
      <description>How text-to-SQL works end to end: schema extraction, the knowledge base, generation, validation, execution and the one correction after a database error.</description>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <category>text-to-sql</category>
      <category>knowledge-base</category>
      <category>validation</category>
    </item>
    <item>
      <title>How to build a text-to-SQL knowledge base from query history</title>
      <link>https://nlqueries.com/blog/query-history-knowledge-base</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/query-history-knowledge-base</guid>
      <description>Query history shows an LLM the joins and filters your team actually uses. How process-history and export-kb build it into the text-to-SQL knowledge base.</description>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <category>knowledge-base</category>
      <category>query-history</category>
      <category>postgresql</category>
      <category>snowflake</category>
      <category>bigquery</category>
    </item>
    <item>
      <title>Letting an LLM query production safely: read-only roles, statement policy and timeouts</title>
      <link>https://nlqueries.com/blog/llm-database-security</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/llm-database-security</guid>
      <description>LLM database security is defence in depth: a read-only identity, a SQL statement policy, timeouts and result caps, and an authenticated MCP server.</description>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <category>security</category>
      <category>postgresql</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Text to SQL is not the hard part</title>
      <link>https://nlqueries.com/blog/text-to-sql-is-not-the-hard-part</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/text-to-sql-is-not-the-hard-part</guid>
      <description>Getting a language model to emit SQL is close to solved. Getting an organisation to trust the answer is not, and that needs different solutions.</description>
      <pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate>
      <category>text-to-sql</category>
      <category>trust</category>
      <category>validation</category>
    </item>
    <item>
      <title>Why we validate SQL before it runs</title>
      <link>https://nlqueries.com/blog/why-we-validate-sql-before-it-runs</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/why-we-validate-sql-before-it-runs</guid>
      <description>The difference between a query that parses, a query that executes, and a query that answers the question. Three separate checks, and only one of them is free.</description>
      <pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate>
      <category>validation</category>
      <category>text-to-sql</category>
      <category>cli</category>
    </item>
    <item>
      <title>Your query history knows what your schema does not</title>
      <link>https://nlqueries.com/blog/your-query-history-knows-what-your-schema-does-not</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/your-query-history-knows-what-your-schema-does-not</guid>
      <description>Schema introspection tells you a column is called status and holds a varchar. Years of queries tell you which joins and filters anyone actually uses.</description>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <category>query-history</category>
      <category>knowledge-base</category>
      <category>text-to-sql</category>
    </item>
    <item>
      <title>The join problem</title>
      <link>https://nlqueries.com/blog/the-join-problem</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/the-join-problem</guid>
      <description>Single-table questions are easy. Most real questions are not, and when a join goes wrong the result is a plausible number rather than an error.</description>
      <pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate>
      <category>joins</category>
      <category>text-to-sql</category>
      <category>knowledge-base</category>
    </item>
    <item>
      <title>How to evaluate a text-to-SQL system on your own data</title>
      <link>https://nlqueries.com/blog/evaluating-text-to-sql-on-your-own-data</link>
      <guid isPermaLink="true">https://nlqueries.com/blog/evaluating-text-to-sql-on-your-own-data</guid>
      <description>Public leaderboard scores do not predict how a system will do on your warehouse. Here is the evaluation we would build if we were buying rather than selling.</description>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <category>evaluation</category>
      <category>text-to-sql</category>
    </item>
  </channel>
</rss>
