From d05e3b0411c2e705bd7a26e93ba55f2b7532e41b Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 10 Oct 2024 22:26:54 +0300 Subject: [PATCH] fix(db-postgres): build indexes for relationships (#8446) Fixes https://github.com/payloadcms/payload/issues/8413 for 2.0, builds indexes for `_rels` tables by default. Does not port `unique: true` from https://github.com/payloadcms/payload/pull/8432 because could be a breaking change if someone has incosistent unique data in the database. --- packages/db-postgres/src/schema/build.ts | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/db-postgres/src/schema/build.ts b/packages/db-postgres/src/schema/build.ts index 42bdd42b5f9..a2c58f94850 100644 --- a/packages/db-postgres/src/schema/build.ts +++ b/packages/db-postgres/src/schema/build.ts @@ -25,6 +25,7 @@ import toSnakeCase from 'to-snake-case' import type { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types' +import { createIndex } from './createIndex' import { createTableName } from './createTableName' import { parentIDColumnMap } from './parentIDColumnMap' import { setColumnID } from './setColumnID' @@ -339,16 +340,28 @@ export const buildTable = ({ if (relatedCollectionCustomIDType === 'number') colType = 'numeric' if (relatedCollectionCustomIDType === 'text') colType = 'varchar' - relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType]( - `${formattedRelationTo}_id`, - ) + const colName = `${relationTo}ID` + + relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`) relationExtraConfig[`${relationTo}IdFk`] = (cols) => foreignKey({ name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`, - columns: [cols[`${relationTo}ID`]], + columns: [cols[colName]], foreignColumns: [adapter.tables[formattedRelationTo].id], }).onDelete('cascade') + + const indexName = [colName] + + if (hasLocalizedRelationshipField) { + indexName.push('locale') + } + + relationExtraConfig[`${relationTo}IdIdx`] = createIndex({ + name: indexName, + columnName: `${formattedRelationTo}_id`, + tableName: relationshipsTableName, + }) }) relationshipsTable = adapter.pgSchema.table(