<p>Last release we moved the database into the cockpit — connect from <code>.env</code>, browse tables, run queries, export to Excel, all without tabbing away. It was lovely. And then, the way it always goes, using it every day surfaced the four little things that were missing. Not big features. The small comforts that turn "this is handy" into "I don't think about it anymore."</p><p>So 0.4.1 is four of those. Let me walk you through them.</p><h2>1. Postgres comes to the party 🐘</h2><p>MySQL and SQLite covered a lot of ground. But plenty of projects — especially the Rails-ish and modern Laravel ones — run on PostgreSQL, and "the database browser doesn't know my database" is a quiet dealbreaker.</p><p>Now it does. Set <code>DB_CONNECTION=pgsql</code> and Conductor connects on 5432, same one-click flow as the others. Or pick PostgreSQL in the manual form.</p><pre><code class="language-env">DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_DATABASE=app_dev
DB_USERNAME=postgres
</code></pre><h3>The neat trick under the hood</h3><p>Postgres is famously fussy about types — <code>timestamps</code>, <code>numeric</code>, <code>uuid</code>, <code>jsonb</code>, arrays. A naive browser drowns trying to decode every column into the "right" Rust type. So we sidestepped the whole problem: Conductor talks to Postgres over its simple query protocol, which hands back every value already rendered as text.</p><p>That means an arbitrary <code>SELECT</code> — with a weird <code>jsonb</code> column, a <code>tstzrange</code>, whatever — just works. No "unsupported type" walls. The browser shows you what <code>psql</code> would show you.</p><p><em>(Phase note: this connects without TLS, which is right for local/dev. Remote-over-TLS is a later addition.)</em></p><h2>2. Per-column filters 🔎</h2><p>The global <code>WHERE</code> box is great when you know exactly what you want. But most of the time you're exploring — "show me the Oslo rows," then "okay, only the ones with a non-empty floor." Writing SQL for each nudge is friction.</p><p>So there's now a filter row right under the column headers. Type in a column, and Conductor narrows to matches:</p><pre><code>city:  Oslo        zip:  04
</code></pre><p>Each box becomes a <code>CAST(col AS TEXT) LIKE '%…%'</code>, combined with <code>AND</code> (and with the <code>WHERE</code> box, if you're using both). It's the spreadsheet instinct — filter where you're looking — applied to a real database. The ✕ clears everything and you're back to the full table.</p><p>It reads like this behind the scenes:</p><pre><code class="language-sql">SELECT * FROM "addresses"
WHERE CAST("city" AS TEXT) LIKE '%Oslo%'
  AND CAST("zip"  AS TEXT) LIKE '%04%'
ORDER BY "city" ASC
LIMIT 100;
</code></pre><p>You never wrote that. You just typed in two little boxes.</p><h2>3. Editable cells ✎</h2><p>Here's the one that quietly changes how you work. You spot a row with a typo, or a flag that should be flipped on a staging record. Old way: open a query tab, hand-write an <code>UPDATE</code>, get the <code>WHERE</code> exactly right, hope you didn't fat-finger the id.</p><p>New way: double-click the cell. Type. Press Enter.</p><pre><code>city:  Oslo  →  Oslo S      ⏎
</code></pre><p>Conductor builds the update for you, scoped to the row's primary key:</p><pre><code class="language-sql">UPDATE "addresses" SET "city" = 'Oslo S' WHERE "id" = '34';
</code></pre><p>A few deliberate guardrails, because editing data deserves care:</p><ul><li><p>It requires a primary key. Conductor detects the PK from the table's schema; if a table has none (or you're looking at a join result), cells stay read-only — there's no safe <code>WHERE</code> to write, so it won't pretend there is.</p></li><li><p><code>Esc</code> cancels, <code>Enter</code> commits, and a single click still just copies the value.</p></li><li><p>PK columns are marked with 🔑 so you always know what identifies a row.</p></li></ul><p>It's the difference between reading your data and working with it</p><h2>4. A Structure view 🔑</h2><p>Sometimes the question isn't "what's in this table" but "what <em>is</em> this table." What type is that column? Is it nullable? What's the key?</p><p>Flip the new Data / Structure toggle and you get exactly that — the columns laid out with their type, nullability, and key:</p><pre><code>Column        Type            Nullable   Key
id            bigint          NO         🔑 PRI
ulid          varchar(26)     NO
city          varchar(255)    YES
zip           varchar(20)     YES
</code></pre><p>No <code>DESCRIBE</code>, no <code>\d</code>, no leaving the table you're already looking at. Just a toggle, and the shape of the thing is right there.</p><h2>A two-minute tour</h2><ol><li><p>Open a Postgres project → DB → Connect from <code>.env</code>.</p></li><li><p>Click a table. Type <code>Oslo</code> in the city filter box. Watch it narrow.</p></li><li><p>Double-click a cell, fix it, press Enter. Done — no <code>UPDATE</code> written by hand.</p></li><li><p>Flip to Structure to check that <code>zip</code> really is a <code>varchar</code>. (It is. That's why your leading zeros survive.)</p></li><li><p>Still curious? ＋ New query, write some SQL, ⤓ Excel the result, ⭐ Save the query (privately, per project).</p></li></ol><p>Every one of those used to be a reason to tab away to another app. None of them is anymore.</p><h2>Why these four, together</h2><p>There's a theme to 0.4.1, and it's not "more database features." It's removing the reasons to leave. Postgres support removes "my DB isn't supported." Per-column filters remove "I have to write SQL to look around." Editable cells remove "I have to hand-craft an <code>UPDATE</code> for a one-character fix." The structure view removes "let me go check the schema somewhere else."</p><p>Each is small. Stacked, they mean you can open a project, poke at its data, fix a thing, check a type, and never once break the spell of being in your project. Which, in the end, is the only thing the cockpit is really for.</p><p>Open a table. Filter a column. Fix a cell. Stay right where you are. 🪵🔥</p><p>Elyra Conductor 0.4.1 adds PostgreSQL, per-column filters, inline cell editing, and a structure view to the database browser — with auto-update built in. As always, Conductor connects, lists, queries, and edits; it never reasons. Your credentials stay in your <code>.env</code>; your thinking stays in your tools.</p>