[Python] Pyrseas Error: dict object has no attribute column
I was using Pyrseas package for database comparison between my clusters. In fact, I am using it for more complex cases and it’s been very helpful. Unfortunately, there is a bug that I encountered recently.
The Problem
Both dbtoyaml and yamltodb are needed for my cases and the command is mainly do as follow:
dbtoyaml --host=localhost --port=5433 sai_database --output=sai_database.yaml
After some processes are running, this throws an error below:
Traceback (most recent call last):
File "/Users/sai/.local/bin/dbtoyaml", line 11, in <module>
sys.exit(main())
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbtoyaml.py", line 49, in main
dbmap = db.to_map()
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/database.py", line 487, in to_map
dbmap.update(self.db.schemas.to_map(self.db, opts))
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/schema.py", line 355, in to_map
schemas.update(self[sch].to_map(db, self, opts))
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/schema.py", line 104, in to_map
schobjs.append((obj, obj.to_map(db, dbschemas, opts)))
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/table.py", line 525, in to_map
tbls[self.foreign_keys[k.name].ref_table].column_names()))
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/constraint.py", line 486, in to_map
dct = super(ForeignKey, self).to_map(db)
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/__init__.py", line 368, in to_map
deps -= self.get_implied_deps(db)
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/constraint.py", line 564, in get_implied_deps
idx = self._find_referenced_index(db, self._references)
File "/Users/sai/.local/lib/python3.4/site-packages/pyrseas/dbobject/constraint.py", line 576, in _find_referenced_index
if uc.columns == self.ref_cols:
AttributeError: 'dict' object has no attribute 'columns'
I’ve asked around and nobody seems to know what is going on. So, I look this up and found out that there is a small bug in Pyrseas 0.8.0 which caused this.
Apparently the problem is in line 581 which is uc.columns
. You can change that line to uc["columns"]
and retry to re-build it.
Solution
But, this bug is easily fixed in this commit. So, you don’t have to build it yourself. Instead, just install the Pyrseas package with command as follow:
pip install git+https://github.com/perseas/Pyrseas/tree/r0.8
This means that you will install Pyrseas packages which is version 0.8.x. There’s no clear information when the new release will be out. I have to argue with my colleague for this case but there’s no other option except this workaround. For now.