2023-12-21 11:06:26 -05:00
|
|
|
export enum DatabaseExtension {
|
|
|
|
|
CUBE = 'cube',
|
|
|
|
|
EARTH_DISTANCE = 'earthdistance',
|
2024-02-06 21:46:38 -05:00
|
|
|
VECTOR = 'vector',
|
2023-12-21 11:06:26 -05:00
|
|
|
VECTORS = 'vectors',
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-06 21:46:38 -05:00
|
|
|
export type VectorExtension = DatabaseExtension.VECTOR | DatabaseExtension.VECTORS;
|
|
|
|
|
|
2024-10-29 15:11:34 +00:00
|
|
|
export type DatabaseConnectionURL = {
|
|
|
|
|
connectionType: 'url';
|
|
|
|
|
url: string;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export type DatabaseConnectionParts = {
|
|
|
|
|
connectionType: 'parts';
|
|
|
|
|
host: string;
|
|
|
|
|
port: number;
|
|
|
|
|
username: string;
|
|
|
|
|
password: string;
|
|
|
|
|
database: string;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export type DatabaseConnectionParams = DatabaseConnectionURL | DatabaseConnectionParts;
|
|
|
|
|
|
2024-02-06 21:46:38 -05:00
|
|
|
export enum VectorIndex {
|
|
|
|
|
CLIP = 'clip_index',
|
|
|
|
|
FACE = 'face_index',
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-27 18:36:51 -05:00
|
|
|
export enum DatabaseLock {
|
|
|
|
|
GeodataImport = 100,
|
2024-02-06 21:46:38 -05:00
|
|
|
Migrations = 200,
|
2024-09-07 13:21:25 -04:00
|
|
|
SystemFileMounts = 300,
|
2023-12-30 15:09:33 +00:00
|
|
|
StorageTemplateMigration = 420,
|
2024-10-01 13:33:58 -04:00
|
|
|
VersionHistory = 500,
|
2023-12-27 18:36:51 -05:00
|
|
|
CLIPDimSize = 512,
|
2024-10-25 14:48:42 +01:00
|
|
|
Library = 1337,
|
2024-05-10 14:15:25 -04:00
|
|
|
GetSystemConfig = 69,
|
2024-10-31 11:29:42 +00:00
|
|
|
BackupDatabase = 42,
|
2023-12-27 18:36:51 -05:00
|
|
|
}
|
|
|
|
|
|
2024-05-20 20:31:36 -04:00
|
|
|
export const EXTENSION_NAMES: Record<DatabaseExtension, string> = {
|
2024-02-06 21:46:38 -05:00
|
|
|
cube: 'cube',
|
|
|
|
|
earthdistance: 'earthdistance',
|
|
|
|
|
vector: 'pgvector',
|
|
|
|
|
vectors: 'pgvecto.rs',
|
|
|
|
|
} as const;
|
|
|
|
|
|
2024-08-05 21:00:25 -04:00
|
|
|
export interface ExtensionVersion {
|
|
|
|
|
availableVersion: string | null;
|
|
|
|
|
installedVersion: string | null;
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-06 21:46:38 -05:00
|
|
|
export interface VectorUpdateResult {
|
|
|
|
|
restartRequired: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-21 11:06:26 -05:00
|
|
|
export const IDatabaseRepository = 'IDatabaseRepository';
|
|
|
|
|
|
|
|
|
|
export interface IDatabaseRepository {
|
2025-01-09 11:15:41 -05:00
|
|
|
init(): void;
|
2024-09-04 13:32:43 -04:00
|
|
|
reconnect(): Promise<boolean>;
|
2025-01-13 19:30:34 -06:00
|
|
|
shutdown(): Promise<void>;
|
2024-08-05 21:00:25 -04:00
|
|
|
getExtensionVersion(extension: DatabaseExtension): Promise<ExtensionVersion>;
|
|
|
|
|
getExtensionVersionRange(extension: VectorExtension): string;
|
2024-05-20 20:31:36 -04:00
|
|
|
getPostgresVersion(): Promise<string>;
|
2024-08-05 21:00:25 -04:00
|
|
|
getPostgresVersionRange(): string;
|
2023-12-21 11:06:26 -05:00
|
|
|
createExtension(extension: DatabaseExtension): Promise<void>;
|
2024-05-20 20:31:36 -04:00
|
|
|
updateVectorExtension(extension: VectorExtension, version?: string): Promise<VectorUpdateResult>;
|
2024-02-06 21:46:38 -05:00
|
|
|
reindex(index: VectorIndex): Promise<void>;
|
|
|
|
|
shouldReindex(name: VectorIndex): Promise<boolean>;
|
2023-12-21 11:06:26 -05:00
|
|
|
runMigrations(options?: { transaction?: 'all' | 'none' | 'each' }): Promise<void>;
|
2023-12-27 18:36:51 -05:00
|
|
|
withLock<R>(lock: DatabaseLock, callback: () => Promise<R>): Promise<R>;
|
2024-03-07 18:36:53 +01:00
|
|
|
tryLock(lock: DatabaseLock): Promise<boolean>;
|
2023-12-27 18:36:51 -05:00
|
|
|
isBusy(lock: DatabaseLock): boolean;
|
|
|
|
|
wait(lock: DatabaseLock): Promise<void>;
|
2023-12-21 11:06:26 -05:00
|
|
|
}
|