VECTOR_MIGRATIONS: Sequence[Migration] = [Migration(
"\nDO $$\nBEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'vector') THEN\n CREATE EXTENSION vector;\n END IF;\nEND $$;\n"), Migration('\nCREATE TABLE IF NOT EXISTS store_vectors (\n prefix text NOT NULL,\n key text NOT NULL,\n field_name text NOT NULL,\n embedding %(vector_type)s(%(dims)s),\n created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (prefix, key, field_name),\n FOREIGN KEY (prefix, key) REFERENCES store(prefix, key) ON DELETE CASCADE\n);\n',
params={'dims': lambda store: store.index_config['dims'], 'vector_type': lambda store: cast(PostgresIndexConfig, store.index_config).get('ann_index_config', {}).get('vector_type', 'vector')}), Migration('\nCREATE INDEX CONCURRENTLY IF NOT EXISTS store_vectors_embedding_idx ON store_vectors \n USING %(index_type)s (embedding %(ops)s)%(index_params)s;\n',
condition=(lambda store: bool(store.index_config and _get_index_params(store)[0] = 'flat')),
params={'index_type': lambda store: _get_index_params(store)[0], 'ops': lambda store: _get_vector_type_ops(store), 'index_params': lambda store: ' WITH (' ', '.join(f'{k}={v}' for k, v in (_get_index_params(store)[1].items())) ')' if _get_index_params(store)[1] else ''}
)]