<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Deedglass blog: posts about PostgreSQL</title>
    <link>https://deedglass.com/blog</link>
    <atom:link href="https://deedglass.com/blog/postgres.xml" rel="self" type="application/rss+xml" />
    <description>Tested PostgreSQL posts about AI agents that write to a database: roles, row-level security, triggers and the change log.</description>
    <language>en</language>
    <lastBuildDate>Fri, 30 Oct 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>How to govern Medplum FHIR agent writes</title>
      <link>https://deedglass.com/blog/govern-medplum-fhir-agent-writes</link>
      <guid isPermaLink="true">https://deedglass.com/blog/govern-medplum-fhir-agent-writes</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>How to connect AI agents to Medplum FHIR APIs via Deedglass, enforce pre-write approval rules, and verify committed resource versions in PostgreSQL.</description>
    </item>
    <item>
      <title>How to govern NVIDIA Nemotron database agents</title>
      <link>https://deedglass.com/blog/govern-nvidia-nemotron-database-agents</link>
      <guid isPermaLink="true">https://deedglass.com/blog/govern-nvidia-nemotron-database-agents</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>How to connect NVIDIA Nemotron reasoning models to PostgreSQL tools via MCP, enforce SQL policies before execution, and verify row diffs with Deedglass.</description>
    </item>
    <item>
      <title>How to govern LlamaIndex database agent tool calls</title>
      <link>https://deedglass.com/blog/llamaindex-agent-database-tool-approvals</link>
      <guid isPermaLink="true">https://deedglass.com/blog/llamaindex-agent-database-tool-approvals</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>How to give a LlamaIndex FunctionAgent database tools via MCP, enforce pre-write approval policies, and verify real Postgres row changes.</description>
    </item>
    <item>
      <title>The best Postgres MCP server depends on its brakes: five compared</title>
      <link>https://deedglass.com/blog/best-postgres-mcp-server</link>
      <guid isPermaLink="true">https://deedglass.com/blog/best-postgres-mcp-server</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Supabase, Neon, Prisma, Postgres MCP Pro and the archived reference server, compared on read-only mode, scoping, confirmations and production advice.</description>
    </item>
    <item>
      <title>drizzle-kit push --force deleted data: why it happens and how to stop it</title>
      <link>https://deedglass.com/blog/drizzle-kit-push-force-data-loss</link>
      <guid isPermaLink="true">https://deedglass.com/blog/drizzle-kit-push-force-data-loss</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>drizzle-kit push --force accepts every data-loss statement without asking. Why agents reach for it, what it can drop, and a safer push or migrate workflow.</description>
    </item>
    <item>
      <title>How to dry-run an UPDATE before an AI agent commits it</title>
      <link>https://deedglass.com/blog/dry-run-an-update-before-the-agent-commits</link>
      <guid isPermaLink="true">https://deedglass.com/blog/dry-run-an-update-before-the-agent-commits</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>EXPLAIN guesses how many rows an UPDATE touches; BEGIN and ROLLBACK counts them, but triggers still run and sequences move. A tested dry run.</description>
    </item>
    <item>
      <title>How to enable logical replication on Supabase, Neon, RDS, Cloud SQL and Azure</title>
      <link>https://deedglass.com/blog/enable-logical-replication-supabase-neon-rds</link>
      <guid isPermaLink="true">https://deedglass.com/blog/enable-logical-replication-supabase-neon-rds</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>How to set wal_level = logical on Supabase, Neon, RDS, Cloud SQL and Azure, who needs REPLICATION, and how to stop slots filling the disk.</description>
    </item>
    <item>
      <title>INSERT … ON CONFLICT said 12 rows. Five of them were overwrites.</title>
      <link>https://deedglass.com/blog/insert-on-conflict-how-many-rows-updated</link>
      <guid isPermaLink="true">https://deedglass.com/blog/insert-on-conflict-how-many-rows-updated</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Postgres answers INSERT 0 12 whether an upsert inserted 12 rows or overwrote 5. Count inserts and updates with RETURNING old or MERGE, tested.</description>
    </item>
    <item>
      <title>How to let an AI agent write database migrations without letting it run them</title>
      <link>https://deedglass.com/blog/let-ai-agents-write-migrations-safely</link>
      <guid isPermaLink="true">https://deedglass.com/blog/let-ai-agents-write-migrations-safely</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Agents are good at writing migrations and risky at running them. A workflow: the agent writes the file, a person reviews it, CI applies it.</description>
    </item>
    <item>
      <title>PostgreSQL 18 RETURNING OLD and NEW: what it returns, with tested examples</title>
      <link>https://deedglass.com/blog/postgres-18-returning-old-new</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-18-returning-old-new</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>PostgreSQL 18 lets RETURNING show old and new values in INSERT, UPDATE, DELETE and MERGE. Tested examples, and how to record what a write changed.</description>
    </item>
    <item>
      <title>Hide personal data columns from an AI agent with Postgres column grants</title>
      <link>https://deedglass.com/blog/postgres-column-grants-hide-pii-from-agent</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-column-grants-hide-pii-from-agent</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Postgres column-level grants keep an AI agent away from email, phone and other personal data in a table it still needs. A tested setup and its limits.</description>
    </item>
    <item>
      <title>Postgres default privileges and an AI agent's role: new tables, granted or not</title>
      <link>https://deedglass.com/blog/postgres-default-privileges-for-agent-roles</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-default-privileges-for-agent-roles</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>GRANT ON ALL TABLES misses tables created later; ALTER DEFAULT PRIVILEGES covers them, sensitive ones included. A tested run, and a safer grant plan.</description>
    </item>
    <item>
      <title>Block DROP TABLE and ALTER TABLE for an AI agent's role with a Postgres event trigger</title>
      <link>https://deedglass.com/blog/postgres-event-trigger-block-ddl</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-event-trigger-block-ddl</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A Postgres event trigger can refuse DROP and ALTER TABLE from an agent role, even on tables it owns. Tested on PostgreSQL 18, plus the gap: TRUNCATE.</description>
    </item>
    <item>
      <title>Postgres SET ROLE per user: making an AI agent query as the person it serves</title>
      <link>https://deedglass.com/blog/postgres-set-role-per-user-agent</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-set-role-per-user-agent</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Run an AI agent's queries as each end user with SET LOCAL ROLE and a per-request setting, so row-level security applies. A tested pattern and its limit.</description>
    </item>
    <item>
      <title>Your Postgres view bypasses row-level security. Here's the fix.</title>
      <link>https://deedglass.com/blog/postgres-view-bypasses-rls</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-view-bypasses-rls</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A Postgres view runs with its owner's rights, so it can skip row-level security. A local test, the one-line fix, and a query to find every such view.</description>
    </item>
    <item>
      <title>rds_superuser and neon_superuser: what your agent inherits, and what to give it instead</title>
      <link>https://deedglass.com/blog/rds-superuser-neon-superuser-agents</link>
      <guid isPermaLink="true">https://deedglass.com/blog/rds-superuser-neon-superuser-agents</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>The default admin roles on RDS, Neon and Supabase can create roles and much more. What each holds, a local SET ROLE test, and a role for agents.</description>
    </item>
    <item>
      <title>A replication slot is filling your disk with WAL: find it, cap it, drop it</title>
      <link>https://deedglass.com/blog/replication-slot-wal-disk-full</link>
      <guid isPermaLink="true">https://deedglass.com/blog/replication-slot-wal-disk-full</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>An unread Postgres replication slot keeps WAL with no limit by default and can fill the disk. Spot it, cap it with max_slot_wal_keep_size, drop it.</description>
    </item>
    <item>
      <title>How to restore one Postgres table to a point in time</title>
      <link>https://deedglass.com/blog/restore-one-postgres-table-point-in-time</link>
      <guid isPermaLink="true">https://deedglass.com/blog/restore-one-postgres-table-point-in-time</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Postgres point-in-time recovery restores a whole cluster, not one table. How to recover a side copy, pause before the bad commit, and copy one table back.</description>
    </item>
    <item>
      <title>Text-to-SQL benchmarks: what BIRD and Spider 2.0 say about letting agents write SQL</title>
      <link>https://deedglass.com/blog/text-to-sql-benchmarks-bird-spider</link>
      <guid isPermaLink="true">https://deedglass.com/blog/text-to-sql-benchmarks-bird-spider</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>BIRD and Spider 2.0 test whether models turn questions into correct SQL on real databases. Their scores, what execution accuracy hides, and safe setups.</description>
    </item>
    <item>
      <title>The transfer failed halfway and the agent said no money moved. The debit had committed.</title>
      <link>https://deedglass.com/blog/transfer-failed-halfway-debit-committed</link>
      <guid isPermaLink="true">https://deedglass.com/blog/transfer-failed-halfway-debit-committed</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>An AI agent's transfer failed on the second statement and it reported no money moved. The debit had committed. Why, how to reproduce it, and how to fix it.</description>
    </item>
    <item>
      <title>Why a regex can't block DROP TABLE from an AI agent: a six-statement test</title>
      <link>https://deedglass.com/blog/why-regex-cant-block-drop-table</link>
      <guid isPermaLink="true">https://deedglass.com/blog/why-regex-cant-block-drop-table</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>We tested a DROP TABLE regex on six statements. Five dropped a table and got through; the only one it blocked was harmless. What to use instead: a parser.</description>
    </item>
    <item>
      <title>An AI agent ran prisma migrate reset on production. What actually stops it?</title>
      <link>https://deedglass.com/blog/ai-agent-ran-prisma-migrate-reset-on-production</link>
      <guid isPermaLink="true">https://deedglass.com/blog/ai-agent-ran-prisma-migrate-reset-on-production</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Prisma stops detected AI agents before migrate reset and db push --force-reset. We tested where that check stops, and the role that held when it did.</description>
    </item>
    <item>
      <title>An AI agent retried a timed-out write and it ran twice: how to make retries safe</title>
      <link>https://deedglass.com/blog/ai-agent-retried-and-wrote-twice</link>
      <guid isPermaLink="true">https://deedglass.com/blog/ai-agent-retried-and-wrote-twice</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A client timeout doesn't undo a write. Measured on Postgres: the first try commits, then the retry commits again. The idempotency key that stops it.</description>
    </item>
    <item>
      <title>Your AI agent ran an UPDATE without a WHERE. How do you stop the next one?</title>
      <link>https://deedglass.com/blog/ai-agent-update-without-where</link>
      <guid isPermaLink="true">https://deedglass.com/blog/ai-agent-update-without-where</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Postgres has no setting that refuses an UPDATE with no WHERE. Five guards compared on real runs, a 20-line trigger that caps agent writes, and recovery.</description>
    </item>
    <item>
      <title>ON DELETE CASCADE deleted more rows than expected: how to see it coming</title>
      <link>https://deedglass.com/blog/on-delete-cascade-deleted-more-rows</link>
      <guid isPermaLink="true">https://deedglass.com/blog/on-delete-cascade-deleted-more-rows</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>Postgres answered DELETE 1 and 49 rows were gone. Why the command tag skips cascades, how to map every chain, and how to count a delete before it commits.</description>
    </item>
    <item>
      <title>The Postgres MCP server read-only bypass: reproduced, and what actually holds</title>
      <link>https://deedglass.com/blog/postgres-mcp-server-read-only-bypass</link>
      <guid isPermaLink="true">https://deedglass.com/blog/postgres-mcp-server-read-only-bypass</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A stacked COMMIT; ends the archived Postgres MCP server's read-only transaction. We reproduced it with psql and tested five fixes. Two hold.</description>
    </item>
    <item>
      <title>Your AI agent said it updated 1 row. Postgres changed 301.</title>
      <link>https://deedglass.com/blog/agent-said-1-row-postgres-changed-301</link>
      <guid isPermaLink="true">https://deedglass.com/blog/agent-said-1-row-postgres-changed-301</guid>
      <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A real run: an agent's one-row UPDATE fires a legacy trigger, Postgres commits 301 rows, and the tool reports 1. How to see it, and how to put it back.</description>
    </item>
    <item>
      <title>How to give an AI agent safe Postgres access: the role, RLS and statement limits</title>
      <link>https://deedglass.com/blog/safe-postgres-access-for-ai-agents</link>
      <guid isPermaLink="true">https://deedglass.com/blog/safe-postgres-access-for-ai-agents</guid>
      <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Arjun Prabhakaran</dc:creator>
      <category>PostgreSQL</category>
      <description>A tested setup for an AI agent's Postgres access: a narrow role, row-level security per customer, statement and lock limits, and the gap they all share.</description>
    </item>
  </channel>
</rss>
