Wir haben vor Kurzem ein Upgrade von MySQL 5.0 auf 5.1 vollzogen. Nach dem Update fiel auf, dass beim Zugriff auf einige (wenn nicht alle) Views eine Warnung kommt:
View [...] has no creation context
Die Meldung lässt sich am einfachsten dadurch beheben, dass man den View einfach mit sich selbst überschreibt. Da dies bei uns eine größere Menge Views war, habe ich dazu folgendes Stück Code geschrieben.
(Ich nutze dafür unsere SQL-Library, die einfach eine gewisse Abstraktion bereitstellt, z.B. die Zugangsdaten aus einem Configfile lesen, DictCursor initialisieren und db.query() als Wrapper für db.execute() und db.fetchall(). Diese Library sollten wir wohl demnächst mal veröffentlichen. :))
#!/usr/bin/python
import re
from sql import sql
db = sql()
views = db.query("select TABLE_SCHEMA `schema`, TABLE_NAME `name` "+
"FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION =''")
for v in views:
print 'fixing %s.%s\n=========================' % (v['schema'], v['name'])
vdef = db.query("SHOW CREATE VIEW %s.%s" % (v['schema'], v['name']))
new = re.sub('CREATE .* VIEW (`?%s`?.)?`?%s`?' % (v['schema'], v['name']),
'ALTER VIEW `%s`.`%s`' % (v['schema'], v['name']), vdef[0]['Create View'])
db.query(new)