Sonarly Claude Code 448048bbdc fix: add BTREE index on position column for custom objects
https://sonarly.com/issue/19173?type=bug

Creating a record via REST API triggers a `SELECT MIN(position)` query that does a full table scan on custom object tables lacking an index on the `position` column, causing 2+ second latency.

Fix: Added a BTREE index on the `position` column to the default indexes created for custom objects.

**What changed:** In `build-default-index-for-custom-object.util.ts`, added a second index (`positionFlatIndex`) alongside the existing `tsVectorFlatIndex`. The new index uses `IndexType.BTREE` on the `position` field, following the identical structure as the existing GIN index on `searchVector`.

**Why:** Every record creation triggers `SELECT MIN(position)` or `SELECT MAX(position)` via `RecordPositionService.findMinPosition()`/`findMaxPosition()`. Without an index, this is a full table scan. For large custom object tables, this causes multi-second latency (2044ms observed in the Sentry trace). BTREE indexes automatically include `deletedAt` in this codebase (handled by `getColumnsForIndex`), which matches the `WHERE deletedAt IS NULL` filter in the query.

**Limitation:** This fix only applies to newly created custom objects. Existing workspaces with large custom object tables will still lack this index. A follow-up migration command should be created to retroactively add BTREE indexes on `position` for all existing custom objects — similar to how the codebase handles other backfill commands in `packages/twenty-server/src/database/commands/`.
2026-03-28 00:23:13 +00:00
2025-08-07 17:02:12 +02:00
2026-03-11 16:30:28 +01:00

Twenty logo

The #1 Open-Source CRM

🌐 Website · 📚 Documentation · Roadmap · Discord · Figma


Cover


Installation

See: 🚀 Self-hosting 🖥️ Local Setup

Why Twenty

We built Twenty for three reasons:

CRMs are too expensive, and users are trapped. Companies use locked-in customer data to hike prices. It shouldn't be that way.

A fresh start is required to build a better experience. We can learn from past mistakes and craft a cohesive experience inspired by new UX patterns from tools like Notion, Airtable or Linear.

We believe in open-source and community. Hundreds of developers are already building Twenty together. Once we have plugin capabilities, a whole ecosystem will grow around it.


What You Can Do With Twenty

Please feel free to flag any specific needs you have by creating an issue.

Below are a few features we have implemented to date:

Personalize layouts with filters, sort, group by, kanban and table views

Companies Kanban Views

Customize your objects and fields

Setting Custom Objects

Create and manage permissions with custom roles

Permissions

Automate workflow with triggers and actions

Workflows

Emails, calendar events, files, and more

Other Features


Stack

Thanks

Chromatic Greptile Sentry Crowdin E2B

Thanks to these amazing services that we use and recommend for UI testing (Chromatic), code review (Greptile), catching bugs (Sentry) and translating (Crowdin).

Join the Community

Languages
TypeScript 78%
MDX 18.5%
JavaScript 3.1%
Python 0.2%