2016-04-25 52 views
0

我在定制odoo中的默认模板时犯了一个错误。 错误位于电子商务模块的类别列表中。 保存我的更改后,Odoo在用户界面上报告了一个错误,并建议回滚。从那以后,odoo网站根本不起作用。在odoo中保存文件的高级视图编辑器

我在哪里可以找到服务器上的修改文件来更改放弃我的更改? 这是我的日志跟踪...这并没有多大帮助!

2016-04-25 19:41:13,773 1505 ERROR fa_prod werkzeug: Error on request: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi 
    execute(self.server.app) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute 
    application_iter = app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/service/server.py", line 290, in app 
    return self.app(e, s) 
    File "/opt/openerp/odoo/openerp/service/wsgi_server.py", line 214, in application 
    return werkzeug.contrib.fixers.ProxyFix(application_unproxied)(environ, start_response) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/contrib/fixers.py", line 144, in __call__ 
    return self.app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/service/wsgi_server.py", line 202, in application_unproxied 
    result = handler(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1290, in __call__ 
    return self.dispatch(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1264, in __call__ 
    return self.app(environ, start_wrapped) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 588, in __call__ 
    return self.app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1428, in dispatch 
    ir_http = request.registry['ir.http'] 
    File "/opt/openerp/odoo/openerp/http.py", line 346, in registry 
    return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None 
    File "/opt/openerp/odoo/openerp/modules/registry.py", line 339, in get 
    update_module) 
    File "/opt/openerp/odoo/openerp/modules/registry.py", line 370, in new 
    openerp.modules.load_modules(registry._db, force_demo, status, update_module) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 351, in load_modules 
    force, status, report, loaded_modules, update_module) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 255, in load_marked_modules 
    loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 157, in load_module_graph 
    init_module_models(cr, package.name, models) 
    File "/opt/openerp/odoo/openerp/modules/module.py", line 293, in init_module_models 
    obj._auto_end(cr, {'module': module_name}) 
    File "/opt/openerp/odoo/openerp/api.py", line 250, in wrapper 
    return old_api(self, *args, **kwargs) 
    File "/opt/openerp/odoo/openerp/models.py", line 2710, in _auto_end 
    cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY ("%s") REFERENCES "%s" ON DELETE %s' % (t, k, r, d)) 
    File "/opt/openerp/odoo/openerp/sql_db.py", line 158, in wrapper 
    return f(self, *args, **kwargs) 
    File "/opt/openerp/odoo/openerp/sql_db.py", line 234, in execute 
    res = self._obj.execute(query, params) 
ProgrammingError: there is no primary key for referenced table "res_users" 

回答

2

发生了什么事是Odoo在回滚模板时损坏了数据库。 大部分表都丢失了主键。

为了重新设置他们,我已经执行以下代码上的工作实例来获得主键的他列表:

select tc.table_schema, tc.table_name, kc.column_name, kc.constraint_name 
from 
    information_schema.table_constraints tc, 
    information_schema.key_column_usage kc 
where 
    tc.constraint_type = 'PRIMARY KEY' 
    and kc.table_name = tc.table_name and kc.table_schema = tc.table_schema 
    and kc.constraint_name = tc.constraint_name 
order by 1, 2; 

然后我出口从损坏的数据库故事的名单:

select table_name from information_schema.tables; 

我在Excel中匹配这一点,并建立查询列表要执行再次得到主键:

="ALTER TABLE "&B15&" ADD PRIMARY KEY ("&C15&");"`enter code here` 

其中B是具有表格的列,C具有主键字段名称。 这给SQL查询的双床像这样:

ALTER TABLE product_template ADD PRIMARY KEY (id); 
ALTER TABLE product_ul ADD PRIMARY KEY (id); 
ALTER TABLE product_uom ADD PRIMARY KEY (id); 
ALTER TABLE product_uom_categ ADD PRIMARY KEY (id); 
... 

我们可以对数据库直接执行此操作。我重新启动了Odoo,并声称。

1

在我看来,你确实在res_users表中犯了一个错误。 也许在这个链接上,你可以重新启动它,如果你有备份:localhost:8069/web/database/manager
另一种方式,你可以通过localhost:5432上的postgresql管理器访问数据库。

程序源代码位于addons/module_name字典中。

我希望这对你有用。

+0

但我没有与数据库交互。我所做的唯一的事情就是在我提出这样做​​时接受模板的回滚。 当时可能有些问题出现了。我会尝试将主键添加到表中并查看。 – curuba

+0

我已经为res_user表添加了主键。然后是与wkf_transition相同的问题。现在一旦更正,它会报告website_menu缺少主键。有没有办法从现有的postgres数据库中提取主键并将它们推送到已损坏的主键? – curuba

+0

一个男人对我说,[这个评论](http://bugs.launchpad.net/openobject-server/+bug/897098/comments/15)解决了他的同样问题。我希望这对你也是一个很好的解决方案。 _“问题是postgres仍然是runnig(test with:top)解决方案:让postgres运行,当使用CPU资源完成时,停止控制台服务器。”_ –

相关问题