Open
Description
Describe the bug: ...
psycopg2's Cursor can be invoked like this: cursor.execute(sql, vars=...)
[0]. This works without instrumentation, but fails when wrapped.
To Reproduce
- Spin up apm and postgres
- execute any cursor with
vars
argument with instrumentation enabled (example provided)
Environment (please complete the following information)
- OS: GNU
- Python version: 3.13.2
- APM Server version: 8.13.0
- Agent version: 6.23.0
Additional context
Resources:
[0] https://www.psycopg.org/docs/cursor.html#cursor.execute
Code example:
import psycopg2
from elasticapm.traces import capture_span
from elasticapm import instrument
def query_db():
conn = psycopg2.connect("host=localhost dbname=test user=postgres password=postgres port=15432")
with conn.cursor() as cur:
cur = conn.cursor()
cur.execute("SELECT now()", vars=[1])
print(cur.fetchone())
conn.close()
if __name__ == "__main__":
query_db()
instrument()
query_db()
Output
(datetime.datetime(2025, 4, 23, 13, 0, 56, 460818, tzinfo=datetime.timezone.utc),)
Traceback (most recent call last):
File "/home/marcin/git/elasticapm-psycopg2-bug/hello.py", line 17, in <module>
query_db()
~~~~~~~~^^
File "/home/marcin/git/elasticapm-psycopg2-bug/hello.py", line 10, in query_db
cur.execute("SELECT now()", vars=[1])
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: CursorProxy.execute() got an unexpected keyword argument 'vars'