Skip to content

Pgbouncer and 'prepared statement does not exist' #198

New issue

Have a question about this project? No Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “No Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? No Sign in to your account

Closed
AmatanHead opened this issue Sep 27, 2017 · 0 comments
Closed

Pgbouncer and 'prepared statement does not exist' #198

AmatanHead opened this issue Sep 27, 2017 · 0 comments
Assignees
Labels

Comments

@AmatanHead
Copy link
Contributor

  • asyncpg version: 0.12.0
  • PostgreSQL version: 9.6
  • Python version: 3.6.2
  • Platform: ubuntu 16.04
  • Do you use pgbouncer?: yes
  • Did you install asyncpg with pip?: yes
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : don't know

Hello! I'm trying to use asyncpg with pgbouncer. I've set statement_cache_size=0 but I still get errors. What am I doing wrong?

In [1]: import os, asyncpg, asyncio

In [2]: loop = asyncio.get_event_loop()

In [3]: conn = loop.run_until_complete(asyncpg.connect(
   ...:     host = 'pgaas.mail.yandex.net',
   ...:     port = 12000,
   ...:     user = 'statinfra_api',
   ...:     database = 'statinfra_api_beta',
   ...:     password=os.environ['DB_PASSWORD'],
   ...:     ssl=True,
   ...:     statement_cache_size=0
   ...: ))

In [4]: loop.run_until_complete(conn.fetch('SELECT * FROM tasks'))
---------------------------------------------------------------------------
InvalidSQLStatementNameError              Traceback (most recent call last)
<ipython-input-5-8a44237acb87> in <module>()
----> 1 loop.run_until_complete(conn.fetch('SELECT * FROM tasks'))

/usr/lib/python3.6/asyncio/base_events.py in run_until_complete(self, future)
    465             raise RuntimeError('Event loop stopped before Future completed.')
    466 
--> 467         return future.result()
    468 
    469     def stop(self):

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/connection.py in fetch(self, query, timeout, *args)
    339         """
    340         self._check_open()
--> 341         return await self._execute(query, args, 0, timeout)
    342 
    343     async def fetchval(self, query, *args, column=0, timeout=None):

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/connection.py in _execute(self, query, args, limit, timeout, return_status)
   1186         timeout = self._protocol._get_timeout(timeout)
   1187         with self._stmt_exclusive_section:
-> 1188             return await self._do_execute(query, executor, timeout)
   1189 
   1190     async def _executemany(self, query, args, timeout):

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/connection.py in _do_execute(self, query, executor, timeout, retry)
   1197     async def _do_execute(self, query, executor, timeout, retry=True):
   1198         if timeout is None:
-> 1199             stmt = await self._get_statement(query, None)
   1200         else:
   1201             before = time.monotonic()

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/connection.py in _get_statement(self, query, timeout, named)
    290                 self._types_stmt = await self.prepare(self._intro_query)
    291 
--> 292             types = await self._types_stmt.fetch(list(ready))
    293             self._protocol.get_settings().register_data_types(types)
    294 

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/prepared_stmt.py in fetch(self, timeout, *args)
    155         :return: A list of :class:`Record` instances.
    156         """
--> 157         data = await self.__bind_execute(args, 0, timeout)
    158         return data
    159 

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/prepared_stmt.py in __bind_execute(self, args, limit, timeout)
    194         protocol = self._connection._protocol
    195         data, status, _ = await protocol.bind_execute(
--> 196             self._state, args, '', limit, True, timeout)
    197         self._last_status = status
    198         return data

~/.virtualenvs/statbox-abt-backend/lib/python3.6/site-packages/asyncpg/protocol/protocol.pyx in bind_execute (asyncpg/protocol/protocol.c:66799)()

InvalidSQLStatementNameError: prepared statement "__asyncpg_stmt_1__" does not exist
elprans added a commit that referenced this issue Sep 27, 2017
Type introspection queries now rely on the general statement cache
instead of ad-hoc prepared statements.

Fixes: #198.
@elprans elprans added the bug label Sep 27, 2017
@elprans elprans self-assigned this Sep 27, 2017
elprans added a commit that referenced this issue Sep 27, 2017
Type introspection queries now rely on the general statement cache
instead of ad-hoc prepared statements.

Fixes: #198.
elprans added a commit that referenced this issue Oct 2, 2017
Type introspection queries now rely on the general statement cache
instead of ad-hoc prepared statements.

Fixes: #198.
elprans added a commit that referenced this issue Oct 2, 2017
Type introspection queries now rely on the general statement cache
instead of ad-hoc prepared statements.

Fixes: #198.
No Sign up for free to join this conversation on GitHub. Already have an account? No Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants