feat(storage): pgvector adapter support gated on tier=federated (FED-M1-03)
Adds pgvector support to the postgres storage adapter without affecting local or standalone tiers: - `StorageConfig` postgres variant gains optional `enableVector: boolean` - `PostgresAdapter.migrate()` runs `CREATE EXTENSION IF NOT EXISTS vector` via `db.execute(sql)` BEFORE migrations when `enableVector === true` (so vector-typed columns are creatable in the same migration pass). Idempotent — safe to re-run on already-installed extension. - `vector` custom type in `@mosaicstack/db/schema` is now exported so downstream packages can declare vector columns in their own schemas. - `DEFAULT_FEDERATED_CONFIG.storage.enableVector = true` so the federated default flows through the adapter. - `detectFromEnv()` restructured: `MOSAIC_STORAGE_TIER` is now checked BEFORE the `DATABASE_URL` guard so `MOSAIC_STORAGE_TIER=federated` alone returns the federated default config instead of silently misrouting to local. Same applies to `=standalone`. With `DATABASE_URL` set, the URL is honored and `enableVector` is preserved on federated. - `detectFromEnv` is now exported for direct test access. Tests: - 4 PostgresAdapter unit tests cover: extension SQL issued when enabled, not issued when disabled or unset, ordering (extension before runMigrations). Assertion uses Drizzle's `toSQL()` with documented fallback for older versions. - 4 detectFromEnv tests cover the four env-var permutations. - 1 federated default constant test. No behavior change for local or standalone tier deployments. Refs #460 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -372,7 +372,11 @@ export const messages = pgTable(
|
||||
|
||||
// ─── pgvector custom type ───────────────────────────────────────────────────
|
||||
|
||||
const vector = customType<{ data: number[]; driverParam: string; config: { dimensions: number } }>({
|
||||
export const vector = customType<{
|
||||
data: number[];
|
||||
driverParam: string;
|
||||
config: { dimensions: number };
|
||||
}>({
|
||||
dataType(config) {
|
||||
return `vector(${config?.dimensions ?? 1536})`;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user