Enum support check fails sporadically against Postgresql 8.2

Issue #1989 resolved
Former user created an issue

I have no short sample that causes this bug to be exercised, since even in my own environment it is transient at best, but I have a traceback (included) of the location and a proposed patch (from IRC):

Basically, I'm seeing an exception in some cases when I open a connection to a PostgreSQL 8.2 database from SQLAlchemy 0.6.5:

Here's the full traceback:

{{{
File '<string>', line 2 in do
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/lib/decorators.py', line 73 in jsonify
  data = f(*args, **kwargs)
File '<string>', line 2 in do
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/lib/decorators.py', line 23 in to_dict
  result = f(*args, **kwargs)
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/controllers/advanis/logins.py', line 37 in do
  if self._verifyPassword(request):
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/controllers/advanis/logins.py', line 32 in _verifyPassword
  return company.createLoginModule().verifyPassword(request.params)
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/lib/login.py', line 24 in verifyPassword
  return self.doVerifyCredentials(credentials)
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/lib/login.py', line 47 in doVerifyCredentials
  credentials['password']('password'))
File '/Users/crose/projects/advanis/9163_saas/webservices/aws/model/aw_registry/user.py', line 67 in verifyPassword
  password=encrypted_pass).one()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/query.py', line 1645 in one
  ret = list(self)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/query.py', line 1688 in __iter__
  return self._execute_and_instances(context)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/query.py', line 1693 in _execute_and_instances
  mapper=self._mapper_zero_or_none())
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/session.py', line 728 in execute
  return self._connection_for_bind(engine, close_with_result=True).execute(
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/session.py', line 669 in _connection_for_bind
  return self.transaction._connection_for_bind(engine)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/orm/session.py', line 336 in _connection_for_bind
  conn = bind.contextual_connect()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/engine/base.py', line 1829 in contextual_connect
  self.pool.connect(),
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 183 in connect
  return _ConnectionFairy(self).checkout()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 370 in __init__
  rec = self._connection_record = pool.get()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 214 in get
  return self.do_get()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 733 in do_get
  con = self.create_connection()
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 148 in create_connection
  return _ConnectionRecord(self)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/pool.py', line 259 in __init__
  l.first_connect(self.connection, self)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py', line 145 in first_connect
  dialect.initialize(c)
File '/Users/crose/virtualenv/advanis/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/base.py', line 712 in initialize
  del self.colspecs[ENUM](ENUM)
KeyError: <class 'sqlalchemy.dialects.postgresql.base.ENUM'>

On IRC, agronholm suggested that this last line (#712 in initialize) should read:

del self.colspec[sqltypes.Enum](sqltypes.Enum)

This makes sense; it's deleting by value in the current code.

Comments (2)

  1. Log in to comment