Hello.

I'm still having some pain with DAL connection strings and migrations.

In one application my DAL connection string is like that:
DAL('postgres://username:password@localhost:5432/postg_db', check_reserved=[
'all'], pool_size=1, entity_quoting=True, bigint_id=True, migrate=False, 
fake_migrate_all=False)

The application works well, but in the databases folder I have only tables 
form ckeditor and scheduler.
If I set fake_migrate_all=True and run the application tables are not 
recreated.
If I set migrate=True a ticket says me that relation "auth_user" already 
exists.
So I'm unable to make modifications to this db.

My reference for migration is this Niphlod post but in this case I don't 
know how to found a solution:
1. Put your models exactly has the database tables are.
2. Do a fake migrate.
3. Remove fake migrate and set migrate=True 
4. Do the changes you need in your model.

What happens if you set migrate=False in the table definition ? the check 
between the model in db.py and the .table file is skipped, and web2py 
assumes that on the db the table reflect exactly what there is in the model

What happens if you set fake_migrate=True in the table definition ? web2py 
assumes that on the db the table reflect exactly what there is in the model, 
the .table files are recreated

What happens if you set fake_migrate_all=True in the DAL ? all .table files 
are recreated, and web2py assumes that on the db the db tables are 
reflecting the model.
 
What happens if you set migrate=False in the DAL? whatever table has no a 
specific "migrate" parameter, the migrate=False is applied to every table

This kind of errors can happen only if you messed with this logic, e.g.
db.define_table('test', Field('test1'), migrate=True) #web2py create the 
test table with the columns id and test1

then
db.define_table('test', Field('test1'), Field('test2'), migrate=False, 
fake_migrate=True) # web2py assumes that you created manually on the db the 
column test2, and updates the .table file

then
db.define_table('test', Field('test1'), Field('test2')) # web2py sees no 
change between the .table file and the model, but if there's not the column 
on the db, when you try to use it you'll get the "no such column" error

then you delete the 'test' .table file manually, then
db.define_table('test', Field('test1'), Field('test2'), migrate=True) #web2py 
assumes that the 'test' table is not on the db, because the corresponding 
.table file is not there, so it tries to create it, and you get the error 
"table 'test' already exists on the db"

or, you delete the 'test' .table file manually, and drop the table manually 
on the db then
db.define_table('test', Field('test1'), migrate=False) #web2py assumes that 
the table is already there, and when you try to use it you get the error 
"table 'test' does not exist"


Someone knows how can I resolve it ?

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to