Bug: areindex and adrop_vector_index in AsyncPGVectorStore ignore the specified schema #100

Closed
opened 2026-02-16 05:16:32 -05:00 by yindo · 1 comment
Owner

Originally created by @li-qingchen on GitHub (Dec 8, 2025).

Checked other resources

There's a PR #222 that fixes this bug, but it hasn't been merged.

Example Code

from langchain_core.embeddings import FakeEmbeddings

from langchain_postgres import PGEngine
from langchain_postgres import PGVectorStore
from langchain_postgres.v2.indexes import HNSWIndex, IVFFlatIndex

POSTGRES_USER = "langchain"
POSTGRES_PASSWORD = "langchain"
POSTGRES_HOST = "localhost"
POSTGRES_PORT = "6024"
POSTGRES_DB = "langchain"
TABLE_NAME = "vectorstore"
VECTOR_SIZE = 1024

# See docker command above to launch a Postgres instance with pgvector enabled.
# docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16
CONNECTION_STRING = (
    f"postgresql+asyncpg://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}"
    f":{POSTGRES_PORT}/{POSTGRES_DB}"
)

##### Use Custom Schema #####
# SCHEMA_NAME = "langchain"  # It's worked
# SCHEMA_NAME = "test"   # Not worked
SCHEMA_NAME = "langchain_test"  # Not worked


async def main():
    pg_engine = PGEngine.from_connection_string(url=CONNECTION_STRING)

    # There is no such method, so we need to create it ourselves in the database
    # pg_engine.create_schema(schema_name=SCHEMA_NAME)

    await pg_engine.ainit_vectorstore_table(
        table_name=TABLE_NAME,
        vector_size=VECTOR_SIZE,
        schema_name=SCHEMA_NAME,  # Default: "public"
    )

    embeddings = FakeEmbeddings(size=VECTOR_SIZE)

    store = await PGVectorStore.create(
        engine=pg_engine,
        table_name=TABLE_NAME,
        schema_name=SCHEMA_NAME,
        embedding_service=embeddings,
    )

    index = IVFFlatIndex()
    await store.aapply_vector_index(index)

    index = HNSWIndex(name="my-hnsw-index")
    await store.aapply_vector_index(index)

    print(store.is_valid_index())
    print(store.is_valid_index("my-hnsw-index"))

    print(await store.areindex())
    print(await store.areindex("my-hnsw-index"))

    print(await store.adrop_vector_index())
    print(await store.adrop_vector_index("my-hnsw-index"))

    print(await pg_engine.adrop_table(TABLE_NAME, schema_name=SCHEMA_NAME))


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

Error Message and Stack Trace (if applicable)

Traceback (most recent call last):
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 550, in _prepare_and_execute
    self._rows = deque(await prepared_stmt.fetch(*parameters))
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 176, in fetch
    data = await self.__bind_execute(args, 0, timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 267, in __bind_execute
    data, status, _ = await self.__do_execute(
                      ^^^^^^^^^^^^^^^^^^^^^^^^
        lambda protocol: protocol.bind_execute(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            self._state, args, '', limit, True, timeout))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 256, in __do_execute
    return await executor(protocol)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "asyncpg/protocol/protocol.pyx", line 206, in bind_execute
asyncpg.exceptions.DuplicateTableError: relation "vectorstore" already exists

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
    ~~~~~~~~~~~~~~~~~~~~~~~^
        cursor, str_statement, effective_parameters, context
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
    cursor.execute(statement, parameters)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute
    self._adapt_connection.await_(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self._prepare_and_execute(operation, parameters)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
            ^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute
    self._handle_exception(error)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception
    self._adapt_connection._handle_exception(error)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception
    raise translated_error from error
sqlalchemy.dialects.postgresql.asyncpg.AsyncAdapt_asyncpg_dbapi.ProgrammingError: <class 'asyncpg.exceptions.DuplicateTableError'>: relation "vectorstore" already exists

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/li/workspace/github/langchain-postgres/test.py", line 70, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/Users/li/workspace/github/langchain-postgres/test.py", line 34, in main
    await pg_engine.ainit_vectorstore_table(
    ...<3 lines>...
    )
  File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 307, in ainit_vectorstore_table
    await self._run_as_async(
    ...<13 lines>...
    )
  File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 121, in _run_as_async
    return await asyncio.wrap_future(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
        asyncio.run_coroutine_threadsafe(coro, self._loop)  # type: ignore[arg-type]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 263, in _ainit_vectorstore_table
    await conn.execute(text(query))
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/engine.py", line 659, in execute
    result = await greenlet_spawn(
             ^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 201, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
        self,
        distilled_parameters,
        execution_options or NO_OPTIONS,
    )
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
    return connection._execute_clauseelement(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self, distilled_params, execution_options
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
        dialect,
    ...<8 lines>...
        cache_hit=cache_hit,
    )
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ~~~~~~~~~~~~~~~~~~~~~~~~~^
        dialect, context, statement, parameters
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        e, str_statement, effective_parameters, cursor, context
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
    ~~~~~~~~~~~~~~~~~~~~~~~^
        cursor, str_statement, effective_parameters, context
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
    cursor.execute(statement, parameters)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute
    self._adapt_connection.await_(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self._prepare_and_execute(operation, parameters)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
            ^^^^^^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute
    self._handle_exception(error)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception
    self._adapt_connection._handle_exception(error)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception
    raise translated_error from error
sqlalchemy.exc.ProgrammingError: (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.DuplicateTableError'>: relation "vectorstore" already exists
[SQL: CREATE TABLE "langchain_test"."vectorstore"(
            "langchain_id" UUID PRIMARY KEY,
            "content" TEXT NOT NULL,
            "embedding" vector(1024) NOT NULL
            ,
"langchain_metadata" JSON
);]
(Background on this error at: https://sqlalche.me/e/20/f405)

Description

When a database schema is specified, areindex and adrop_vector_index in AsyncPGVectorStore do not take effect.

The issue can be directly reproduced with the example code below.

Originally created by @li-qingchen on GitHub (Dec 8, 2025). ### Checked other resources There's a PR #222 that fixes this bug, but it hasn't been merged. ### Example Code ```python from langchain_core.embeddings import FakeEmbeddings from langchain_postgres import PGEngine from langchain_postgres import PGVectorStore from langchain_postgres.v2.indexes import HNSWIndex, IVFFlatIndex POSTGRES_USER = "langchain" POSTGRES_PASSWORD = "langchain" POSTGRES_HOST = "localhost" POSTGRES_PORT = "6024" POSTGRES_DB = "langchain" TABLE_NAME = "vectorstore" VECTOR_SIZE = 1024 # See docker command above to launch a Postgres instance with pgvector enabled. # docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16 CONNECTION_STRING = ( f"postgresql+asyncpg://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}" f":{POSTGRES_PORT}/{POSTGRES_DB}" ) ##### Use Custom Schema ##### # SCHEMA_NAME = "langchain" # It's worked # SCHEMA_NAME = "test" # Not worked SCHEMA_NAME = "langchain_test" # Not worked async def main(): pg_engine = PGEngine.from_connection_string(url=CONNECTION_STRING) # There is no such method, so we need to create it ourselves in the database # pg_engine.create_schema(schema_name=SCHEMA_NAME) await pg_engine.ainit_vectorstore_table( table_name=TABLE_NAME, vector_size=VECTOR_SIZE, schema_name=SCHEMA_NAME, # Default: "public" ) embeddings = FakeEmbeddings(size=VECTOR_SIZE) store = await PGVectorStore.create( engine=pg_engine, table_name=TABLE_NAME, schema_name=SCHEMA_NAME, embedding_service=embeddings, ) index = IVFFlatIndex() await store.aapply_vector_index(index) index = HNSWIndex(name="my-hnsw-index") await store.aapply_vector_index(index) print(store.is_valid_index()) print(store.is_valid_index("my-hnsw-index")) print(await store.areindex()) print(await store.areindex("my-hnsw-index")) print(await store.adrop_vector_index()) print(await store.adrop_vector_index("my-hnsw-index")) print(await pg_engine.adrop_table(TABLE_NAME, schema_name=SCHEMA_NAME)) if __name__ == "__main__": import asyncio asyncio.run(main()) ``` ### Error Message and Stack Trace (if applicable) ```text Traceback (most recent call last): File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 550, in _prepare_and_execute self._rows = deque(await prepared_stmt.fetch(*parameters)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 176, in fetch data = await self.__bind_execute(args, 0, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 267, in __bind_execute data, status, _ = await self.__do_execute( ^^^^^^^^^^^^^^^^^^^^^^^^ lambda protocol: protocol.bind_execute( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self._state, args, '', limit, True, timeout)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/asyncpg/prepared_stmt.py", line 256, in __do_execute return await executor(protocol) ^^^^^^^^^^^^^^^^^^^^^^^^ File "asyncpg/protocol/protocol.pyx", line 206, in bind_execute asyncpg.exceptions.DuplicateTableError: relation "vectorstore" already exists The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context self.dialect.do_execute( ~~~~~~~~~~~~~~~~~~~~~~~^ cursor, str_statement, effective_parameters, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute cursor.execute(statement, parameters) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute self._adapt_connection.await_( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self._prepare_and_execute(operation, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn value = await result ^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute self._handle_exception(error) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception self._adapt_connection._handle_exception(error) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception raise translated_error from error sqlalchemy.dialects.postgresql.asyncpg.AsyncAdapt_asyncpg_dbapi.ProgrammingError: <class 'asyncpg.exceptions.DuplicateTableError'>: relation "vectorstore" already exists The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/li/workspace/github/langchain-postgres/test.py", line 70, in <module> asyncio.run(main()) ~~~~~~~~~~~^^^^^^^^ File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run return runner.run(main) ~~~~~~~~~~^^^^^^ File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run return self._loop.run_until_complete(task) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "/Users/li/Library/Application Support/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete return future.result() ~~~~~~~~~~~~~^^ File "/Users/li/workspace/github/langchain-postgres/test.py", line 34, in main await pg_engine.ainit_vectorstore_table( ...<3 lines>... ) File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 307, in ainit_vectorstore_table await self._run_as_async( ...<13 lines>... ) File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 121, in _run_as_async return await asyncio.wrap_future( ^^^^^^^^^^^^^^^^^^^^^^^^^^ asyncio.run_coroutine_threadsafe(coro, self._loop) # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/langchain_postgres/v2/engine.py", line 263, in _ainit_vectorstore_table await conn.execute(text(query)) File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/engine.py", line 659, in execute result = await greenlet_spawn( ^^^^^^^^^^^^^^^^^^^^^ ...<5 lines>... ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 201, in greenlet_spawn result = context.throw(*sys.exc_info()) File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute return meth( self, distilled_parameters, execution_options or NO_OPTIONS, ) File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection return connection._execute_clauseelement( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self, distilled_params, execution_options ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement ret = self._execute_context( dialect, ...<8 lines>... cache_hit=cache_hit, ) File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context return self._exec_single_context( ~~~~~~~~~~~~~~~~~~~~~~~~~^ dialect, context, statement, parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context self._handle_dbapi_exception( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ e, str_statement, effective_parameters, cursor, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception raise sqlalchemy_exception.with_traceback(exc_info[2]) from e File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context self.dialect.do_execute( ~~~~~~~~~~~~~~~~~~~~~~~^ cursor, str_statement, effective_parameters, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute cursor.execute(statement, parameters) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute self._adapt_connection.await_( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self._prepare_and_execute(operation, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn value = await result ^^^^^^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute self._handle_exception(error) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception self._adapt_connection._handle_exception(error) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/Users/li/workspace/github/langchain-postgres/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception raise translated_error from error sqlalchemy.exc.ProgrammingError: (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.DuplicateTableError'>: relation "vectorstore" already exists [SQL: CREATE TABLE "langchain_test"."vectorstore"( "langchain_id" UUID PRIMARY KEY, "content" TEXT NOT NULL, "embedding" vector(1024) NOT NULL , "langchain_metadata" JSON );] (Background on this error at: https://sqlalche.me/e/20/f405) ``` ### Description When a database schema is specified, areindex and adrop_vector_index in AsyncPGVectorStore do not take effect. The issue can be directly reproduced with the example code below.
yindo closed this issue 2026-02-16 05:16:32 -05:00
Author
Owner

@dishaprakash commented on GitHub (Dec 11, 2025):

@qingchen177 Thank you for opening this detailed bug! We will review the PR and update this thread.

@dishaprakash commented on GitHub (Dec 11, 2025): @qingchen177 Thank you for opening this detailed bug! We will review the PR and update this thread.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langchain-ai/langchain-postgres#100