qizhiyi / sqlalchemy-migrate

Automatically exported from code.google.com/p/sqlalchemy-migrate
MIT License
0 stars 0 forks source link

clob.alter(type=BLOB) tracebacks on Oracle #62

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1. have a Table with a CLOB column
2. try to convert the column to BLOB 

What is the expected output? What do you see instead?

It would be nice if migrate could abstract the database differences away more.

Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/migrate/versioning/shell.py", line
132, in main
    ret = command(**kwargs)
  File "/usr/lib/python2.6/dist-packages/migrate/versioning/api.py", line
188, in upgrade
    return _migrate(url,repository,version,upgrade=True,err=err,**opts)
  File "/usr/lib/python2.6/dist-packages/migrate/versioning/api.py", line
224, in _migrate
    schema.runchange(ver,change,changeset.step)
  File "/usr/lib/python2.6/dist-packages/migrate/versioning/schema.py",
line 159, in runchange
    change.run(self.engine,step)
  File "/usr/lib/python2.6/dist-packages/migrate/versioning/script/py.py",
line 85, in run
    func()
  File "project/versions/003_clob2blob.py", line 25, in upgrade
    col.alter(type=BLOB())
  File "/usr/lib/python2.6/dist-packages/migrate/changeset/schema.py", line
312, in alter
    return alter_column(self,*p,**k)
  File "/usr/lib/python2.6/dist-packages/migrate/changeset/schema.py", line
78, in alter_column
    _engine_run_visitor(engine,visitorcallable,delta)
  File "/usr/lib/python2.6/dist-packages/migrate/changeset/schema.py", line
58, in _engine_run_visitor

element.accept_schema_visitor(visitorcallable(engine.dialect,connection=conn))
  File "/usr/lib/python2.6/dist-packages/migrate/changeset/schema.py", line
231, in accept_schema_visitor
    return visitor.visit_column(self)
  File
"/usr/lib/python2.6/dist-packages/migrate/changeset/databases/oracle.py",
line 26, in visit_column
    self._run_subvisit(delta,self._visit_column_change)
  File "/usr/lib/python2.6/dist-packages/migrate/changeset/ansisql.py",
line 142, in _run_subvisit
    self.execute()
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
1794, in execute
    return self.connection.execute(self.buffer.getvalue())
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
844, in execute
    return Connection.executors[c](self, object, multiparams, params)
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
854, in _execute_text
    self.__execute_raw(context)
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
916, in __execute_raw
    self._cursor_execute(context.cursor, context.statement,
context.parameters[0], context=context)
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
960, in _cursor_execute
    self._handle_dbapi_exception(e, statement, parameters, cursor)
  File "/var/lib/python-support/python2.6/sqlalchemy/engine/base.py", line
942, in _handle_dbapi_exception
    raise exceptions.DBAPIError.instance(statement, parameters, e,
connection_invalidated=is_disconnect)
DatabaseError: (DatabaseError) ORA-22858: invalid alteration of datatype
 '\nALTER TABLE metadata MODIFY value BLOB' {}

What version of the product are you using? On what operating system?

sqlalchemy-migrate 0.4.5 with sqlalchemy 0.4.8 on Ubuntu jaunty.

Original issue reported on code.google.com by lars...@gmail.com on 7 Aug 2009 at 1:07

GoogleCodeExporter commented 8 years ago
As far as I know CLOB and BLOB are totally different structures, main reason 
why 
oracle does not support altering. If you purpose how should those two be 
converted, 
I'll implement it.

Original comment by iElect...@gmail.com on 21 Sep 2009 at 10:38