\d schema.table crashes
I am using the latest version of pgspecial with postgresql 11.5 on Manjaro Linux.
I am using pgspecial from ipython-sql
Once I connect to my DB, I can run commands such as:
%sql \dn pg_catalog
and get proper output
But, if I try to run a command such as:
%sql \d pg_catalog.pg_class
it crashes with the following stack trace
`
AttributeError Traceback (most recent call last)
/usr/lib/python3.7/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth) 2312 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals 2313 with self.builtin_trap: -> 2314 result = fn(*args, **kwargs) 2315 return result 2316
</usr/lib/python3.7/site-packages/decorator.py:decorator-gen-127> in execute(self, line, cell, local_ns)
/usr/lib/python3.7/site-packages/IPython/core/magic.py in
</usr/lib/python3.7/site-packages/decorator.py:decorator-gen-126> in execute(self, line, cell, local_ns)
/usr/lib/python3.7/site-packages/IPython/core/magic.py in
/usr/lib/python3.7/site-packages/sql/magic.py in execute(self, line, cell, local_ns) 93 94 try: ---> 95 result = sql.run.run(conn, parsed['sql'], self, user_ns) 96 97 if result is not None and not isinstance(result, str) and self.column_local_vars:
/usr/lib/python3.7/site-packages/sql/run.py in run(conn, sql, config, user_namespace) 335 _, cur, headers, _ = pgspecial.execute( 336 conn.session.connection.cursor(), statement)[0] --> 337 result = FakeResultProxy(cur, headers) 338 else: 339 txt = sqlalchemy.sql.text(statement)
/usr/lib/python3.7/site-packages/sql/run.py in init(self, cursor, headers) 298 299 def init(self, cursor, headers): --> 300 self.fetchall = cursor.fetchall 301 self.fetchmany = cursor.fetchmany 302 self.rowcount = cursor.rowcount
AttributeError: 'list' object has no attribute 'fetchall' `
It doesn't matter what table I use.
Comming back to this and spending some time debugging, what I found is that the outputs from this call: _, cur, headers, _ = pgspecial.execute(conn.session.connection.cursor(), statement)[0] are not compatible with the inputs to this call: result = FakeResultProxy(cur, headers)
Specifically, the variable 'cur' contains a list of the rows returned from running the command NOT a cursor. The FakeResultProxy class expects a cursor in the 'cur' variable.
I hacked a work-around so I can use this but I doubt it's a real fix.